2017-01-06 2 views
0

배열 목록에 객체를 넣으려고하는 오류 3 개가으로 표시되었습니다. 포럼을 살펴본 결과 question이 내 것과 유사하지만 내 경우에는 해당되지 않는다고 생각합니다. House.cpp에C++ 배열에 객체 배치

House.h에서
#include "House.h" 
#include <iostream> 


House::House(string a, int h) 
{ 
    Name = a; 
    Health = h; 
} 
void House::DamageHouse(int d) { 
    Health -= d; 
    cout << "Your " << Name << " has " << Health << " left."<<endl; 
} 
int House::GetHouseHealth() { 
    return Health; 
} 
string House::GetHouseName() { 
    string returning = Name; 
    return returning; 
} 
House::~House() 
{ 
} 

#include <string> 
using namespace std; 
class House 
{ 
    string Name; 
    int Health; 
public: 
    House(string a, int h); 
    int GetHouseHealth(); 
    void DamageHouse(int d); 
    string GetHouseName(); 
    ~House(); 
}; 

오류 Test.cpp에의

(기본 파일)

#include <iostream> 
#include "House.h" 
using namespace std; 

House HouseArray[2]; 

int main() 
{ 
    string toPrint; 
    House Kubo("Kubo", 2); 
    HouseArray[0] = Kubo; 
    toPrint = HouseArray[0].GetHouseName; 
    cout <<toPrint<< endl; 

} 

:

다음은 내 코드입니다
  1. 오류 C2512 '하우스': 사용 가능한 적절한 기본 생성자 9 행의 test.cpp
  2. 오류 C3867 'House :: GetHouseName': 비표준 구문; 어떠한 작업자가 우측을 "오버 기능 '형 피연산자를 취하는 발견 (또는있다 : 에 사용'&은 '오류'= '이진 C2679 16
  3. 라인 부재 Test.cpp에 대한 포인터를 생성 당신이 그와 같은 배열을 만들려면 라인에는 허용 변환) Test.cpp에 16
+0

*** GetHouseName 멤버 함수를 *** 호출 하시겠습니까? 그리고 객체 배열을 만들 때 배열의 요소는 기본적으로 생성되며 기본 생성자는 없습니다. –

답변

0
  1. 당신은 기본 생성자를 필요가 없습니다 : House HouseArray[2]; 컴파일러는 그래서 빈 House을 만드는 방법을 알고 있어야합니다 초기 배열을 초기화 할 수 있습니다. 따라서 클래스에 함수를 호출하려면 House.h 에 House() { Name = ""; Health = 0; }

  2. 을 다음과 같이 추가, 당신은 괄호를 추가해야 toPrint = HouseArray[0].GetHouseName();

  3. 내가 위뿐만 아니라이 문제를 해결할 수 있다고 의심 .

+0

기본 ctor에'a'와'h'가 무엇입니까? – acraig5075

+0

배열의 요소는 정적 저장 기간 (네임 스페이스 범위에서 정의 되었기 때문에)이 있으므로 값 초기화됩니다. 로컬 변수로 만들면 문제가 사라집니다. – rubenvb

+0

@ acraig5075, 죄송합니다. 코드를 복사 할 때 그 부분을 수정하는 걸 잊었습니다. 지금 수정 : 유효한 기본값이어야합니다. –