未定义的引用,尝试创建类似struct的向量

时间:2018-05-15 21:43:34

标签: 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_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;
}

1 个答案:

答案 0 :(得分:-2)

因为我会详细说明答案。静态在类范围之外定义,因此要编译它,添加以下行以将静态引入编译器符号表:

float float_vector::val[50];

正如其他人指出这是糟糕的设计,你不应该这样写你的sudo矢量容器。 Val将由您班级的所有实例共享,因此数据将被覆盖,您将无法保持大小和容量。大小也是固定的,所以这并没有太多的矢量提供。多数说,你应该使用动态内存进行底层存储,最好使用RAII来检查良好的示例实现检查&#34; C ++编程语言&#34; c ++ 11版本,第375页,有适当的矢量实现示例。