Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未定义引用,正在尝试创建类似向量的结构_C++_Struct - Fatal编程技术网

C++ 未定义引用,正在尝试创建类似向量的结构

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

我试着创建一些像我自己一样的向量,所以我试着为它创建一个结构。我经常得到“对‘float_vector::val’的未定义引用”,我无法解析

#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++源文件中。