-1
저는 C++을 처음 접했고 정의되지 않았지만 생성자에게 정의되지 않은 참조 오류가 계속 발생했습니다. 나는 이것이 아주 흔한 실수이며 이것에 관해 많은 질문이 있다는 것을 알고 있지만, 각각은 내 것과 조금 다른 것처럼 보이고 나의 문제를 해결할 수 없다.C++의 가상 클래스 생성자에 대한 정의되지 않은 참조
기본적으로 클래스 B에 "실제"하위 클래스 ASub가있는 가상 클래스 인 클래스 A의 인스턴스 변수가 있어야합니다. 또한 클래스 A의 파일은 ~/level1 /에 있고 클래스 B의 파일은 ~/level1/level2 /에 있습니다.
error: undefined reference to 'mynamespace::A::A()'
error: undefined reference to 'mynamespace::A::~A()'
아 다음과 같습니다 :
#ifndef A_H__
#define A_H__
namespace mynamespace {
class A {
public:
A();
virtual ~A();
};
class ASub : public A {
public:
ASub();
~ASub();
};
} // namespace mynamespace
#endif // A_H__
a.cc은 다음과 같습니다
#include "level1/a.h"
namespace mynamespace {
A::A() {}
A::~A() {}
ASub::ASub() {}
ASub::~ASub() {}
}; // namespace mynamespace
BH는 다음과 같습니다
나는 다음과 같은 오류가 점점 계속
#ifndef B_H__
#define B_H__
#include "level1/a.h"
namespace mynamespace {
class B {
public:
B();
~B();
void SetA(A a);
private:
A a_;
};
} // namespace mynamespace
#endif // B_H__
그리고 마지막으로 b.cc은 다음과 같습니다
#include "level1/level2/b.h"
#include "level1/a.h"
namespace mynamespace {
B::B() {}
B::~B() {}
void B::SetA(A a) {
a_ = a;
}
}; // namespace mynamespace
컴파일해야합니다. b.h를 처리하는 동안 'A'가 선언되지 않습니다. 표시하는 코드는 실제로 작성한 코드가 아닙니다. –
오브젝트 파일을 어떻게 연결하고 있습니까? ('A' 선언이 없으므로'b.h '도 컴파일 할 수 있을지 의심 스럽습니다.) 또한'A_H__'는 이중 밑줄이 있기 때문에 예약 된 식별자입니다. 사용하지 마십시오. –
프로젝트를 빌드하는 데 사용하는 명령 줄을 표시하십시오. – randomusername