0
나는 C의 기본 생성자 ++ 관련 질문이 있습니다. 정적 배열
class Name
{
public:
Name(string name);
private:
m_name;
}
class DataBase
{
public:
DataBase();
void addToDB(string name);
Name* getPtrToName(string name);
private:
Name m_Name[10];
int NoOfEntries;
}
가 지금은 클래스 데이터베이스의 객체를 생성하고 데이터베이스에 새 항목을 추가하는 것을 시도하고있다 : 다음
클래스와 코드입니다.
/*
* Name.cpp
*/
Name::Name(string name) //overloaded constructor
{
m_name = name;
}
/*
* DataBase.cpp
*/
DataBase::addToDB(string name) // add entries to the database
{
Name newEntryToDB(name);
m_Name[NoOfEntries] = newEntryToDB;
NoOfEntries++;
}
DataBase::DataBase() // gives an error stating no matching call for function Name::Name()
{
NoOfEntries = 0;
}
오류 "함수 이름에 대한
일치 전화 : 이름()"이제 내가 단순히 Name.cpp의 기본 생성자를 정의하고 컴파일을 확인할 수 있는지 이해
오류. 그러나 컴파일러에서 자동으로 호출되는 기본 생성자가 아닙니까? 이렇게하면 오류가 트리거되는 것을 피할 수 있습니다.
떨어져 Name.cpp의 기본 생성자를 정의에서이 오류를 해결하려면 다른 방법이 있습니까?
글쎄, 당신의 배열은 ** 항상 ** ** 정확히 ** 10 개 요소가 포함되어 있습니다. 배열을 처음부터 어떻게 초기화하고 싶습니까? 당신이 (데이터베이스 개체의 수명의 시작 부분에서 빈 즉)는 동적으로 크기로하려면, 대신에'표준 : vector'를 사용합니다. - 또는 - Name을 "dummy"또는 "null"값으로 초기화 할 기본 생성자를 실제로 정의하십시오. 배열의'NoOfEntries' 엔트리에 대해서만 접근한다면,이 더미 값이 얼마나 정확하게 정의되는지는 중요하지 않습니다. – leemes
@leemes - 정확히 !! 'NoOfEntries'는 Database의 값을 제한하는 데 사용됩니다. 나는 코드를 단순화하기 위해 여기에 추가하는 것을 피했다. :) – user2559758