2015-02-14 1 views
-1

При попытке создать массив моего класса я получал ошибку, поэтому я начал удалять переменные в классе. Я обнаружил, что удаление всех структур с именем vector2, компилятор сможет создать массив класса. Я не знаю, почему это не работает, или почему структура повлияет на него.Struct in Class вызывает ошибку, когда класс используется в массиве

#include <iostream> 
using namespace std; 

struct vector2 
{ 
    double x = 0, y = 0; 
    vector2(double doubleX, double doubleY) 
    { 
     x = doubleX; 
     y = doubleY; 
    } 
}; 

class Dog 
{ 
    private: 
     vector2 location; 
     int age; 

    public: 
     void setLocation(vector2); 
     vector2 getLocation(); 

     void setAge(int); 
     int getAge(); 

}; 
void Dog::setLocation(vector2 newLocation) 
{ 
    location = newLocation; 
} 
vector2 Dog::getLocation() 
{ 
    return location; 
} 

void Dog::setAge(int newAge) 
{ 
    age = newAge; 
} 
int Dog::getAge() 
{ 
    return age; 
} 

int main() 
{ 
    Dog myDogs[1]; 
    myDogs[0].setAge(10); 
    return 0; 
} 

BTW: Я заметил, что некоторые из vector2 кода не работает, но я попытался это с помощью std::vector, и она прекрасно работает (с конструктором)

+1

'vector2' не имеет конструктор по умолчанию: например, вы не можете писать 'vector2 v;', только 'vector2 v (1, 2);' из-за этого компилятор не может создать конструктор по умолчанию для 'Dog'. –

+0

@IgorTandetnik Как я могу это исправить? Это не позволит мне делать 'vector2 location (0,0)' или 'vector2 location (vector2 (0,0));' в классе 'Dog' – Orfby

+0

@Orfby См. Мой ответ ниже, это два из ваших вариантов (их больше) – CoryKramer

ответ

0

Ваш Dog имеет vector2 член переменная, но vector2 не имеет конструктора по умолчанию. И у вас нет конструктора Dog, который использует параметризированный конструктор vector2.

Либо дать vector2 конструктор по умолчанию

vector2::vector2() : x{0.0}, y{0.0} {} 

Или конструктор для Dog, который использует параметризованных конструктор vector2

Dog::Dog(int _age) : age{_age}, location{0.0, 0.0} {} 
+0

'vector2 :: vector2(): x {0.0}, y {0.0} {}' отлично работает в программе, спасибо! – Orfby

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