2014-11-03 8 views
-2

Мне нужна помощь в построении конструктора, который инициализировал соответствующие данные при создании в пределах main().Конструктор не работает должным образом

#include <iostream> 
using namespace std; 
class Entity{ 
     public: 
      int x, int y, char icon; }; 

int main(){ 
Entity pData; 
pData.x=4; pData.y=3, pData.icon='1'; 
cout<<pData.x<<'\n'\; cout<<pData.y<<'\n'\; cout<<pData.icon<<\'n'\; 
} 

Я включил пример того, что мне нужно ... нет необходимости включать всю программу. В любом случае мне нужен конструктор для инициализации данных в основном, как только экземпляре (PDATA) сущностей создается: Я знаю, что конструктор должен быть чем-то вроде

Entity::Entity(int x, int y, char icon){}; 

и сразу реализованный в основном это было бы что-то вроде

Entity pData{3,4,'1'}; 

, но очевидно, что это не работает для меня

ой я, кстати, нужен конструктор, потому что это то, что назначение спрашивать в первую очередь здесь вы идете скопирована сразу с док файл

«написать параметризированный конструктор для класса Entity, который устанавливает х, у, и значок, и использовать его при создании экземпляра»

+0

Есть ли что-то в {} вашего конструктора? Или это все это? – deviantfan

+0

хорошо, вот что я не совсем понял. Мне нужно что-то внутри {}?Моя книга плохо работает, объясняя это. – Ardy

+0

См. Ниже примеры конструкторов (и почему вам в этом случае не нужен). Вообще говоря, конструктор выполняется, когда объект создается. Он * может * давать переменным некоторые начальные значения (фиксированные значения или некоторые значения параметров или ...), но он может делать и все остальное. Это как обычный метод, который называется просто автоматически. Если это метод эвтрий, он ничего не сделает. – deviantfan

ответ

1

На самом деле вы не определили конструктор для вашего класса Entity (Но компилятор определил его для вас, но он выделяет память только для переменной-члена Entity).

class Entity { public: int x,y; char icon; Entity(int _x, int _y,char _icon) { x=_x; y=_y icon=_icon; } };

int main() 
{ 
    Entity obj(4,3,'I'); 
    return 0; 
} 

`

+0

Все, я вижу, что конструктор определен внутри публичной части класса. УДИВИТЕЛЬНЫЙ !!! это сделал трюк для меня. Большое спасибо, сэр. – Ardy

1
Entity::Entity(int a, int b, char c) 
{ 
    x = a; 
    y = b; 
    icon = c; 
}; 

Определите конструктор, как это ...

И вызов это как: -

Entity pData(1,2,'a'); 
+0

, и вы бы поместили этот блок кода (определение) сразу после правильного определения вашего класса? – Ardy

1

Вам не нужно добавлять конструктор, потому что ваш класс является агрегатом. Это будет работать (после исправления некоторых опечаток)

class Entity 
{ 
public: 
    int x, y; 
    char icon; 
}; 

#include <iostream> 

int main() 
{ 
    using std::cout; 

    Entity pData{3,4,'1'}; 

    cout << pData.x <<'\n'; 
    cout << pData.y <<'\n'; 
    cout << pData.icon <<'\n'; 
} 
+0

Я понимаю, что вы говорите, но инструкции для присваивания читают «напишите параметризованный конструктор для класса Entity, который устанавливает x, y и значок, и используйте его при создании экземпляра. – Ardy

+0

@ Ardy Тогда почему вы не положили эта информация в вашем вопросе? – juanchopanza

+0

Очень жаль, я взял, как 10 минут, чтобы написать вопрос, а затем пошел афк на секунду и вернулся на почту, не понимая, что кто-то (мой младший брат) удалил кусок информации, поэтому я снова переписал и забыл добавьте это. Извините – Ardy

1

Вы можете, например, определить конструктор следующим образом

class Entity{ 
     public: 
      Entity(int x, int y, char icon) : x(x), y(y), icon(icon) {} 
      int x, int y, char icon; 
}; 

И использовать его как

Entity pData(4, 3,'1'); 

или

Entity pData { 4, 3,'1' }; 

или

Entity pData = { 4, 3,'1' }; 

Примите во внимание, что для первоначального определения класса можно написать

Entity pData = { 4, 3,'1' }; 

без определения явно конструктор.

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