C++错误:找不到成员声明
C++ error: Member declaration not found
我是一个c++新手。今天,我遇到了一个问题:在头文件中,我定义了一个类:
template<class T> class Ptr_to_const {
private:
Array_Data<T>* ap;
unsigned sub;
public:
...
Ptr_to_const<T> & operator=(const Ptr_to_const<T> & p);
};
在源文件中,我编程为:
template<class T> Ptr_to_const<T>& Ptr_to_const<T>::operator=(
const Ptr_to_const<T> & p) {
...
return *this;
}
编译时,编译器总是说:"未找到成员声明"。为什么
我使用eclipse CDT+Cygwin GCC
非常感谢!
模板类需要在标头或用户包含的另一个文件中声明和定义。它们不能像往常一样在头中声明并在源文件中定义。
理由是,模板必须替换为实际类型以及使用时生成和编译的类型的源,编译器当然不能为可能出现的每一种类型预编译模板,因此用户需要能够处理这一点(因此,需要访问代码)。
如果多个库包含相同的模板,这在传递对象时确实会导致一些问题,因为它们可能是针对不同版本的头进行编译的(请参阅"一个定义规则")。
"找不到成员声明"是由Eclipse静态分析工具(codan)而非编译器产生的错误。如果你得到这个错误,但编译成功,这是一个假阳性。众所周知,该工具的旧版本会出现一些误报,例如,请参阅此错误报告。因此,我建议将EclipseCDT更新到最新版本。如果这没有帮助,请向EclipseCDT提交一份错误报告。
但是,如果您也从编译器中得到错误(这些错误由Problems视图的Type列中的C/C++Problem指示),那么您可能忘记了包含头文件。
您应该在头文件的末尾包含源文件或者在定义模板类时在头文件中定义成员函数
相关文章:
- 使用静态成员声明类时遇到问题
- 错误 C2059:语法错误:从结构成员声明'constant'
- std::d eclare_if 或其他在编译时丢弃成员声明的假设方法
- C++ 成员声明中不允许使用限定名称
- 又一个"未找到成员声明"
- auto f = bind(dist<>,gen) 在成员声明C++失败。未被识别为函数
- C++错误:成员声明末尾的预期“;”
- 静态成员声明 c++11
- 如何将成员声明为指向外部"C"函数的指针?
- C++11 - 将非静态数据成员声明为 'auto'
- 类成员声明的快捷方式
- libclang 获取成员声明
- 将成员声明与enable_if一起使用
- 找不到成员声明
- C++错误:找不到成员声明
- 找不到c++成员声明
- 成员声明顺序在类中如果彼此依赖,则为最优解
- 将struct的成员声明为uint32_t时额外的字节
- 为什么类的大小取决于成员声明的顺序?以及如何
- 是成员声明`decltype(name)name;`在第一个名称引用封闭作用域的本地结构中允许