首页 > 解决方案 > 未定义的引用,试图创建类似结构的向量

问题描述

我尝试自己创建类似矢量的东西,所以我尝试为此创建一个结构。我经常得到“对'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;
}

标签: c++struct

解决方案


由于反对票,我将详细说明答案。静态是在类范围之外定义的,所以要编译它,添加下面的行来将你的静态引入你的编译器符号表:

float float_vector::val[50];

正如其他人指出的那样,这是糟糕的设计,你不应该这样写你的 sudo 矢量容器。Val 将由您的类的所有实例共享,因此数据将被覆盖,您将无法保持大小和容量。大小也是固定的,因此这与矢量提供的功能无关。话虽如此,您应该将动态内存用于底层存储,最好使用 RAII,以检查良好的示例实现检查“C++ 编程语言”c++11 版,第 375 页,有适当的向量实现示例。


推荐阅读