我刚刚在学习 C++ 中的模板,我遇到了在模板中使用静态变量的想法。我创建了一个包含三维向量的简单类。我决定将“单位上限”(i、j 和 k)保持为静态,以便使其成为类属性而不是对象属性:
#include <iostream>
using namespace std;
template <class T = int>
class vector
{
int *arr;
static string caps;
public:
vector() {}
vector(int arr[]) : arr(arr) {}
void setVector(int arr[])
{
this->arr = arr;
}
void displayVector()
{
cout << "The vector is : " << arr[0] << caps[0] << " + " << arr[1] << caps[1] << " + " << arr[2] << caps[2] << endl;
}
};
string vector::caps = "ijk";
然后我尝试了一些东西:
template <class T>
string vector::caps = "ijk";
仍然报错。
您看到的错误消息表明编译器无法解析对静态成员变量 vector::caps 的引用。这是因为静态成员变量的定义需要用类模板的模板参数来限定
可以通过以下方式定义静态成员变量:
template <class T>
string vector<T>::caps = "ijk";
这里vector::caps显式地用模板参数T限定了静态成员变量caps。
通过此更改,您的类定义应该可以正常工作。