2016-08-05 1 views
-3

Мы изучаем классы, и я выполняю свое задание, чтобы написать класс и 5 разных объектов и показать разницу.У меня есть данные, но он говорит, что не может разрешить переменные «данные»

Профессор сказал, что мы должны использовать конструктор по умолчанию и книга говорит следующее:

Конструктор по умолчанию конструктор, который может быть вызван без аргументов (либо определяется с пустым списком параметров, или по умолчанию аргументы для каждого параметра).

Я делаю именно то, что сделал учитель; не могли бы вы рассказать мне, почему он говорит, что не может найти data?

#include <iostream> 

using namespace std; 

class theC 
{ 
private: 
    string data; 
public: 
    theC() { 
     printf("default\n"); 
    } 
}; 

int main() 
{ 
    theC c1(); 
    theC c2(); 
    theC c3(); 
    theC c4(); 
    theC c5(); 

    c1.data = "different object 1"; 
    c2.data = "different object 2"; 
    c3.data = "different object 3"; 
    c4.data = "different object 4"; 
    c5.data = "different object 5"; 
    cout << c1.data << c2.data << c3.data << c4.data << c5.data; 
    return 0; 
} 
+7

Вы должны узнать о [спецификаторов доступа членов] (http://en.cppreference.com/w/cpp/language/access), что это означает, что член класса является «частным». –

+3

И 'theC c1();' является объявлением функции. Измените его на 'cC1;', то же самое для других. – songyuanyao

+0

[спецификаторы доступа] (http://en.cppreference.com/w/cpp/language/access) –

ответ

4

Ваш код имеет несколько вопросов:

Выпуск один: в этих строках:

theC c1(); 
theC c2();  
theC c3(); 
theC c4(); 
theC c5(); 

Здесь вы пытаетесь объявить экземпляр (объект) вашего класса theC. Тем не менее, ваш компилятор рассматривает его как Function Declaration и Прототип функции называется c1, которая принимает ноль или без параметров (() пуста) и возвращает объект типа theC.

Правильный синтаксис для объявления объекта вашего класса будет: theC c1;

Так что ваше конструктор по умолчанию будет называться как только вы объявляете переменную свой класс. Так оно и работает.

Выпуск два: Кроме того, вы не можете получить доступ к любой "Private" член. Вам нужно, чтобы это было «Public», или вам нужно будет использовать getters and setters.

Выпуск три: Вы используете в string класс без #include <string>.

+0

Я сделал это, и он работает, но он отображает все на одной строке, вы знаете, почему? –

+0

Ваш код делает ** точно ** как вы его написали: 'cout << c1.data << c2.data << c3.data << c4.data << c5.data;' –

+0

oh yeah! Я его разрешу ... Спасибо! –

2

Эти заявления

int main() 
{ 
    theC c1(); 
    theC c2(); 
    theC c3(); 
    theC c4(); 
    theC 
    c5(); 
//.. 

объявить функции c1, c2, c3, c4 и c5 с возвращаемым типом theC и без каких-либо параметров.

Написать вместо

int main() 
{ 
    theC c1; 
    theC c2; 
    theC c3; 
    theC c4; 
    theC 
    c5; 
//... 

Также вы должны, по крайней мере, включать заголовки, <string> и <cstdio>, поскольку программа использует объявления из этих заголовков.

Учтите, что элемент данных data объявлен как закрытый.Таким образом, вы не можете получить к нему доступ непосредственно вне определения класса как

c1.data = "different object 1"; 
c2.data = "different object 2"; 
c3.data = "different object 3"; 
c4.data = "different object 4"; 
c5.data = "different object 5"; 
+0

Почему ''? –

+1

@FirstStep Я написал, что по крайней мере ... Он использует стандартную функцию C printf в конструкторе. –

+0

Я говорю это, потому что он работает без него –

Смежные вопросы