我写了一个简单的测试代码,我尝试在静态方法中使用静态向量。
这是代码。
#include <iostream>
#include <vector>
using namespace std;
template <class T1>
class A
{
static T1 x;
static vector<T1> v;
public:
static void testOne();
};
template <class T1>
T1 A<T1>::x = 56;
template <class T1>
void
A<T1>::testOne()
{
A::x = 45;
A::v.push_back(34);
cout << A::x << endl;
cout << A::v.size() << endl;
}
int
main(int argc, char* argv[])
{
A<int>::testOne();
return 0;
}
但是当我编译时,我得到以下内容:
static.cpp:25:6: warning: instantiation of variable 'A<int>::v' required here,
but no definition is available [-Wundefined-var-template]
A::v.push_back(34);
^
static.cpp:34:11: note: in instantiation of member function 'A<int>::testOne'
requested here
A<int>::testOne();
^
static.cpp:10:21: note: forward declaration of template entity is here
static vector<T1> v;
^
1 warning generated.
Undefined symbols for architecture x86_64:
"A<int>::v", referenced from:
A<int>::testOne() in static-9790dc.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我尝试添加以下vector<T1>A::v;
,但在编译时,我得到以下内容:
static.cpp:18:8: error: use of undeclared identifier 'T1'
vector<T1>A::v;
^
static.cpp:18:11: error: 'A' is not a class, namespace, or enumeration
vector<T1>A::v;
^
static.cpp:7:7: note: 'A' declared here
class A
^
2 errors generated.
什么是最佳解决方案?
答案 0 :(得分:1)
您需要像定义v
一样定义x
。
template <class T1>
std::vector<T1> A<T1>::v{ /* Put any initializzation paramters here */ };
在A::
引用x
和v
时,您也可以省略A<T1>::testOne()
。
template <class T1>
void A<T1>::testOne()
{
x = 45;
v.push_back(34);
cout << x << endl;
cout << v.size() << endl;
}