Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;错误:找不到成员声明 我是一个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); }; 模板类Ptr\u to\u const{ 私人: 数组_数据*ap; 无符号子节点; 公众: ... Ptr_至_常量和运算符=(常量Ptr_至_常量和运算符); };_C++_Declaration_Member - Fatal编程技术网

C++;错误:找不到成员声明 我是一个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); }; 模板类Ptr\u to\u const{ 私人: 数组_数据*ap; 无符号子节点; 公众: ... Ptr_至_常量和运算符=(常量Ptr_至_常量和运算符); };

C++;错误:找不到成员声明 我是一个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); }; 模板类Ptr\u to\u const{ 私人: 数组_数据*ap; 无符号子节点; 公众: ... Ptr_至_常量和运算符=(常量Ptr_至_常量和运算符); };,c++,declaration,member,C++,Declaration,Member,在源文件中,我将程序设置为: template<class T> Ptr_to_const<T>& Ptr_to_const<T>::operator=( const Ptr_to_const<T> & p) { ... return *this; } 模板Ptr_to_const&Ptr_to_const::operator=( 承包商Ptr_至承包商p){ ... 归还*这个; }

在源文件中,我将程序设置为:

template<class T> Ptr_to_const<T>& Ptr_to_const<T>::operator=(
        const Ptr_to_const<T> & p) {
         ...
    return *this;
}
模板Ptr_to_const&Ptr_to_const::operator=(
承包商Ptr_至承包商p){
...
归还*这个;
}
编译时,编译器总是说:“未找到成员声明””。 为什么?

我在GCC中使用eclipsecdt+Cygwin


多谢各位

模板类需要在头文件或用户包含的其他文件中声明和定义。它们不能像往常一样在头文件中声明,也不能在源文件中定义

理由是,模板必须替换为实际类型以及使用时生成和编译的源代码,并且编译器当然不能为可能出现的每种类型预编译模板,因此用户需要能够处理这些类型(因此,需要访问代码)


当传递对象时,如果多个库包含相同的模板,这确实会导致一些问题,因为它们可能根据不同版本的头文件进行编译(请参见“一个定义”规则)。

您应该在头文件末尾包含源文件 或者在定义模板类时在头文件中定义成员函数。“未找到成员声明”是由Eclipse静态分析工具()而不是编译器生成的错误。如果出现此错误,但编译成功,则为假阳性。已知此工具的旧版本会出现一些误报,例如,请参阅。因此,我建议将EclipseCDT更新到最新版本。如果这没有帮助,请向EclipseCDT提交错误报告


但是,如果您也从编译器中得到了错误(这些错误由Problems视图的Type列中的C/C++问题指示),那么您可能忘记了包含头文件。

AFAIK您不应该在源文件中实现模板类。在标题中设置函数的定义。