专门化时对静态成员变量的未定义引用
Undefined reference to static member variable when specializing
我有以下代码:
struct All {
All() {}
~All() {}
template <typename T>
static struct Item {
T var;
} item;
virtual void setVal() noexcept {}
};
template <typename T>
struct any : public All
{
public:
any() : All() {}
~any() {}
T value;
void setVal() noexcept override {
All::item<decltype(value)>.var = value; // Error appears here
}
};
和以下错误:
对
All:item<int>
的未定义引用
我不明白这个错误,因为item是一个静态成员变量模板,我必须特殊化它…
救命!
您的错误在于您从未定义静态成员变量。你只是宣布了而已。添加定义:
template <typename T>
All::Item<T> All::item = {};
但是,我测试的编译器不接受定义成员变量模板的类型和声明变量本身的语法。g++(5.2.0)对声明没有问题,但抱怨All::Item
在为变量定义指定类型时不是模板。clang++(3.6.0)甚至不接受你的声明。简单地把类型的定义和变量的声明分开就解决了这个问题:
template <typename T>
struct Item {
T var;
};
template <typename T>
static Item<T> item;
相关文章:
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用