Неопределенная ссылка, пытающаяся создать вектор как структура - PullRequest
0 голосов
/ 16 мая 2018

Я пытался создать что-то похожее на вектор, поэтому я попытался создать структуру для этого. Я постоянно получаю «неопределенную ссылку на« 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 голосов
/ 16 мая 2018

Из-за отрицательных ответов я уточню ответ. Статика определяется вне области видимости класса, поэтому, чтобы просто скомпилировать ее, добавьте строку ниже, чтобы представить свою статику в таблицу символов компилятора:

float float_vector::val[50];

Как отмечали другие люди, это плохой дизайн, и вам не следует писать свой векторный контейнер sudo таким образом. Val будет доступен всем экземплярам вашего класса, поэтому данные будут переопределены, и вы не сможете сохранить размер и емкость. Кроме того, размер фиксирован, так что это не так много делает для того, что предлагает вектор. При этом следует использовать динамическую память для основного хранилища, предпочтительно с использованием RAII, чтобы проверить хороший пример реализации. Проверка «Язык программирования C ++», издание C ++ 11, стр. 375, есть правильный пример векторной реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...