我想在类内部声明结构的静态向量,然后在类函数中使用它。但是它总是给我错误:
undefined reference
首先,我尝试了一个不使用结构的简单代码。以下代码运行无任何错误:
#include <iostream>
#include <vector>
using namespace std;
class CACHE
{
public:
static vector<int> gtt;
CACHE(int index, int value){
gtt[index]=value;
}
void show_gtt(){
for(int i=0; i<4; i++){
cout<<gtt[i]<<'\n';
}
cout<<'\n';
}
};
//Initializing 4 values
vector<int> CACHE::gtt = vector<int>(4);
int main(){
CACHE L1(1, 78);
L1.show_gtt();
CACHE L2(2, 55);
L2.show_gtt();
return 0;
}
我知道我最多可以有4个对象,因此在函数和初始化中使用'4'。输出如下:
0
78
0
0
0
78
55
0
现在,我尝试相同的概念,但使用Structure的方式如下:
#include <iostream>
#include <vector>
using namespace std;
struct gtt_struct
{
static int x;
static int y;
};
class CACHE
{
public:
static vector<gtt_struct> gtt;
CACHE(int index, int value_1, int value_2){
gtt[index].x=value_1;
gtt[index].x=value_2;
}
void show_gtt(){
for(int i=0; i<4; i++){
cout<<"["<<gtt[i].x<<", "<<gtt[i].y<<"]\n";
}
cout<<'\n';
}
};
//Initializing 4 values
vector<gtt_struct> CACHE::gtt = vector<gtt_struct>(4);
int main(){
CACHE L1(1, 78, 33);
L1.show_gtt();
CACHE L2(2, 55, 49);
L2.show_gtt();
return 0;
}
上面的代码给了我以下编译错误:
/tmp/ccijWpnu.o: In function `CACHE::CACHE(int, int, int)':
test_1.cpp:(.text._ZN5CACHEC2Eiii[_ZN5CACHEC5Eiii]+0x2e): undefined reference to `gtt_struct::x'
test_1.cpp:(.text._ZN5CACHEC2Eiii[_ZN5CACHEC5Eiii]+0x4b): undefined reference to `gtt_struct::x'
/tmp/ccijWpnu.o: In function `CACHE::show_gtt()':
test_1.cpp:(.text._ZN5CACHE8show_gttEv[_ZN5CACHE8show_gttEv]+0x4a): undefined reference to `gtt_struct::x'
test_1.cpp:(.text._ZN5CACHE8show_gttEv[_ZN5CACHE8show_gttEv]+0x80): undefined reference to `gtt_struct::y'
collect2: error: ld returned 1 exit status
我认为我已遵循其他帖子中提到的初始化准则。但似乎是结构语法引起了问题。语法gtt[index].x
是否不正确?还是其他C ++概念问题?
您定义了x和y静态值。所以像这样使用它们:gtt [index] :: x,:: y