将命名空间添加到项目时出现以下错误:
CPoolElement.h:
#ifndef CPOOLELEMENT_H_
#define CPOOLELEMENT_H_
namespace TestName {
class CPoolElement {
public:
CPoolElement();
virtual ~CPoolElement();
};
}
#endif /* CPOOLELEMENT_H_ */
CPoolElement.cpp:
#include "CPoolElement.h"
namespace TestName {
CPoolElement::CPoolElement() {
// TODO Auto-generated constructor stub
}
CPoolElement::~CPoolElement() {
// TODO Auto-generated destructor stub
}
}
CRecordingPoolElement.cpp:
#include "CRecordingPoolElement.h"
namespace TestName {
CRecordingPoolElement::CRecordingPoolElement() {
// TODO Auto-generated constructor stub
}
CRecordingPoolElement::~CRecordingPoolElement() {
// TODO Auto-generated destructor stub
}
}
CRecordingPoolElement.h:
#ifndef CRECORDINGPOOLELEMENT_H_
#define CRECORDINGPOOLELEMENT_H_
#include "CPoolElement.h"
namespace TestName {
class CRecordingPoolElement : public CPoolElement{
public:
CRecordingPoolElement();
virtual ~CRecordingPoolElement();
};
}
#endif /* CRECORDINGPOOLELEMENT_H_ */
CTwo.h:
#ifndef CTWO_H_
#define CTWO_H_
class CPoolElement;
namespace TestName {
class CTwo {
public:
CTwo();
virtual ~CTwo();
CPoolElement* GetElm();
};
}
#endif /* CTWO_H_ */
CTwo.cpp:
#include "CTwo.h"
#include "CRecordingPoolElement.h"
namespace TestName {
CTwo::CTwo() {
// TODO Auto-generated constructor stub
}
CTwo::~CTwo() {
// TODO Auto-generated destructor stub
}
CPoolElement* CTwo::GetElm() {
return new CRecordingPoolElement();
}
}
错误:
“错误:
TestName::CPoolElement* TestName::CTwo::GetElm()
的原型(prototype)与TestName::CTwo
类中的任何不匹配”最佳答案
您将声明的“类CPoolElement”转发到“TestName”命名空间之外,但是在CTwo::GetElm定义中找到的CPoolElement是在TestName namespace 中声明的类。
命名空间使您可以将代码与其他类名分开,这些类名可以类似地命名,但可以在其他 header 中声明,可能来自库或某些外部依赖项。这些是完全不同的类,可以做完全不同的事情。
当在CTwo.h中转发声明的CPoolElement时,您指定了想要的CPoolElement类应该存在(声明)在“全局”命名空间中。但是,当编译器遇到您对GetElm的声明时,它发现了另一个类“TestName::CTwo”。
将您的向前声明移到TestName命名空间中,我想您会解决您的错误。
CTwo.h:
#ifndef CTWO_H_
#define CTWO_H_
//class CPoolElement; <--- NOT HERE
namespace TestName {
class CPoolElement; // <--- HERE
class CTwo {
public:
CTwo();
virtual ~CTwo();
CPoolElement* GetElm();
};
}
#endif /* CTWO_H_ */