C++ C++;元组链接问题:未定义引用
我想这段代码有严重的问题。它将编译,但不会链接C++ C++;元组链接问题:未定义引用,c++,c++11,tuples,C++,C++11,Tuples,我想这段代码有严重的问题。它将编译,但不会链接 #include <iostream> #include <tuple> class Table_class { public: constexpr static std::tuple<int, unsigned int, unsigned short> table[3] = {std::make_tuple(1, 2, 3), std::make_tuple(4, 5,
#include <iostream>
#include <tuple>
class Table_class
{
public:
constexpr static std::tuple<int, unsigned int, unsigned short> table[3]
= {std::make_tuple(1, 2, 3),
std::make_tuple(4, 5, 6),
std::make_tuple(7, 8, 9)};
};
int main()
{
std::cout << std::get<0>(Table_class::table[0]);
return 0;
}
这怎么纠正呢?这并不是大错特错。您的代码在C++17中完全合法。但是,在C++17之前,静态constexpr数据成员需要在类之外定义,因此请在某处查找并添加以下定义:
constexpr std::tuple<int, unsigned int, unsigned short> Table_class::table[3];
constepr std::tuple Table_class::Table[3];
通常,变量定义不应在头文件中。这是链接错误的常见来源。 您必须在类定义之外定义表,以使链接器找到它。 一个简化的例子:
#include <iostream>
#include <tuple>
class Table_class
{
public:
constexpr static std::tuple<int, unsigned int, unsigned short> table = std::make_tuple(1, 2, 3);
};
constexpr std::tuple<int, unsigned int, unsigned short> Table_class::table;
int main()
{
std::cout << std::get<0>(Table_class::table);
return 0;
}
#包括
#包括
类表
{
公众:
constexpr static std::tuple table=std::make_tuple(1,2,3);
};
constexpr std::tuple Table_class::Table;
int main()
{
std::cout可能的解决方案副本可以工作并解决问题,但是,当作为.h或.cpp文件的一部分使用时,它有一个缺点,即必须在调用它的例程中定义该行。C++17祈祷吧!!!
#include <iostream>
#include <tuple>
class Table_class
{
public:
constexpr static std::tuple<int, unsigned int, unsigned short> table = std::make_tuple(1, 2, 3);
};
constexpr std::tuple<int, unsigned int, unsigned short> Table_class::table;
int main()
{
std::cout << std::get<0>(Table_class::table);
return 0;
}