Неопределенная ссылка на вектор строки * stati c - PullRequest
1 голос
/ 28 марта 2020

Итак, у меня есть этот класс:

class Movie
{
    std::string name;
    std::string rating;
    size_t watched;
    static std::vector<std::string> vec;

public:
    Movie(std::string name, std::string rating, size_t watched)
    {
        this->name = name;
        this->rating = rating;
        this->watched = watched;
        std::cout << "Created movie " << this->name << std::endl;
        --> //vec.push_back(this->name);
    }

    static void dispAll() {
        --> //std::cout << "There are " << vec.size() << " movies: " << std::endl;
        --> //for(auto movie: vec){
          //cout << "Movie: " << movie.name << endl;
       //}
    }
};

И это мое основное:

int main(){
  Movie::dispNum();
  Movie saw("saw","PG-13",10);
  Movie::dispNum();

  return 0;
}

Так что этот класс делает то, что он просто позволяет пользователю создать Mov ie с этим синтаксисом Movie("name","rating",watched_count) этот класс также содержит вектор stati c и добавляет к нему имя mov ie, созданного в конструкторе, после чего пользователь может получить доступ к функции dispNum, которая возвращает размер вектора по сути, показывает количество фильмов, а затем перебирает вектор для отображения каждого движения ie, теперь, когда я пытаюсь получить доступ к этому вектору в строках со стрелкой -->, я получаю ошибку компоновщика main.cpp:(.text._ZN5MovieC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_m[_ZN5MovieC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_m]+0xce): undefined reference to 'Movie::vec[abi:cxx11]'.

Есть идеи, что тут может быть не так?

Заранее спасибо.

1 Ответ

2 голосов
/ 28 марта 2020

Внутри class декларации static члены объявлены , но не определены .

Вам все еще нужно определить static членов где-нибудь в вашей программе.

Например, вот так

class Movie
{
    static std::vector<std::string> vec;   // declaration
};

std::vector<std::string> Movie::vec; // definition

Начиная с C ++ 17 вы можете объявить его inline, в этом случае это будет определено внутри класса:

class Movie
{
    inline static std::vector<std::string> vec;   // declaration and definition
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...