C++ 错误 : Member declaration not found

标签 c++ declaration member

我是一个 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

非常感谢!

最佳答案

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

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

如果多个库包含相同的模板,这确实会在传递对象时引起一些问题,因为它们可能针对不同版本的 header 进行编译(请参阅单一定义规则)。

关于C++ 错误 : Member declaration not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8847781/

相关文章:

typescript - 如何修复项目库中损坏的类型签名?

c - 是否应该在每个声明中使用关键字 "inline"?

c++ - LONG_PTR 的迭代器

c++ - 从 wiki 实现白平衡算法

c++ - 什么时候为 Widget 父构造函数放置 "this"关键字?

c++ - 返回值的增量

import - 在 Lua 中如何导入模块?

c++ - 如何初始化作为类成员的 shared_ptr?

c++ - 访问者与公共(public)成员

c++ - 非友元、非成员函数增加封装?