gpt4 book ai didi

c++ - 对类模板的静态变量的 undefined reference

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:21 25 4
gpt4 key购买 nike

下面是我的代码:

// types.h
template <typename T>
struct type_to_char {};

template <>
struct type_to_char<char> {
static constexpr char str[] = "baz";
};


// main.cpp
#include <iostream>
#include <string>

#include "types.h"

int main() {
std::cout << type_to_char<char>::str << std::endl;
return 0;
}

尝试编译时,链接器返回错误: undefined reference to type_to_char<char>::str

我遇到过this answer ,但我不确定如何在我的案例中应用它,因为模板未编译。我应该把一个单独的 .cpp项目中的文件?

constexpr 的声明和定义有什么区别?变量?这样的变量不能在没有初始化器的情况下声明,所以我为什么要在 .cpp 中放置一个单独的定义?文件?

我希望能对此做出一些澄清

最佳答案

由于您完全特化了一个类,因此它在许多方面表现得像一个未模板化的类。一个例子是它的静态成员必须像非模板类一样在实现文件中实例化。

// header file (type.h)
template <typename T>
struct type_to_char {};

template <>
struct type_to_char<char> {
static constexpr char str[] = "baz";
};

// impementation file (type.cpp)
constexpr char type_to_char <char>::str[];

// main.cpp
#include <iostream>
#include <type.h>

int main() {
std::cout << type_to_char<char>::str << std::endl;
return 0;
}

关于c++ - 对类模板的静态变量的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41552335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com