C++ 未定义引用,正在尝试创建类似向量的结构
我试着创建一些像我自己一样的向量,所以我试着为它创建一个结构。我经常得到“对‘float_vector::val’的未定义引用”,我无法解析C++ 未定义引用,正在尝试创建类似向量的结构,c++,struct,C++,Struct,我试着创建一些像我自己一样的向量,所以我试着为它创建一个结构。我经常得到“对‘float_vector::val’的未定义引用”,我无法解析 #include <iostream> using namespace std; struct float_vector { static float val[50]; int i =0; float* pointer() { return val; } void push
#include <iostream>
using namespace std;
struct float_vector
{
static float val[50];
int i =0;
float* pointer()
{
return val;
}
void push_back2(float value)
{
val[i] = value;
i++;
}
int size2()
{
return i;
}
float at2(int ati)
{
return val[ati];
}
};
int main()
{
float_vector aa, some, tmep;
some.push_back2(5);
some.push_back2(5.5);
some.push_back2(5.779);
cout << (some.pointer())[1];
cout << some.size2();
int u, p;
return 0;
}
#包括
使用名称空间std;
结构浮点向量
{
静态浮点值[50];
int i=0;
浮点*指针()
{
返回val;
}
无效推回2(浮动值)
{
val[i]=值;
i++;
}
int size2()
{
返回i;
}
浮点at2(int ati)
{
返回值[ati];
}
};
int main()
{
float_向量aa,some,tmep;
一些。推回2(5);
一些。推回2(5.5);
一些。推回2(5.779);
cout由于反对票,我将详细说明答案。静态是在类范围之外定义的,所以要编译它,请添加以下行,将静态引入编译器符号表:
float float_vector::val[50];
正如其他人指出的那样,这是一个糟糕的设计,您不应该以这种方式编写sudo vector容器。Val将由您的类的所有实例共享,因此数据将被覆盖,您将无法保持大小和容量。而且大小是固定的,所以这与vector提供的功能没有多大关系。也就是说,您应该使用dynamIC存储器用于底层存储,最好使用RAII,检查好的示例实现,检查“C++编程语言”C++ 11版,第375页,有矢量实现的正确例子。< /P>代码>静态浮点Val[50 ];<代码>为什么>代码>静态< /代码>?只是代码>浮法Val[50 ];< /C> >将是好的。“我试图创造一些像我自己一样的东西"-为什么?为什么不直接使用std::vector
?你不太可能做得更好,也很可能做得更糟。只需使用std::vector或查看其实现。删除“静态”以及你从哪本教科书学习这些东西?是的,它起作用了。它为什么起作用???我不想创建比std::vector I更好的东西我只是想要一个能在Arduino上工作的方便的东西严格来说,这会解决问题。但是如果每个实例都共享一个底层数组,那么它将是一个非常糟糕的向量实现。我相信这解释了向下投票。这实际上是一个定义。但我不理解向下投票。另外,“在你的类定义下面添加”是错误的-它应该在一个单独的C++源文件中。