Сообщение об ошибке «неопределенная ссылка на« List :: a »» - PullRequest
2 голосов
/ 18 марта 2019

Я получаю сообщение об ошибке, показанное ниже, при связывании кода.Как я могу решить эту проблему?

Кажется, статическая переменная не инициализируется.

#include <iostream>
#include <cstdlib>

using namespace std;

struct name{
    char c;
};

class List {
    static name *a;
public:
    static void modify()
    {
        a = new name();
        cout<<"yes";
    }
};

name List::*a = NULL;

int main()
{
    List::modify();
}

g++ O3 -Wall -c -fmessage-length=0 -o sample.o "..\\sample.cpp"
g++ -o sample.exe sample.o
sample.o:sample.cpp:(.text.startup+0x35): undefined reference to `List::a'
collect2.exe: error: ld returned 1 exit status

1 Ответ

5 голосов
/ 18 марта 2019

name List::*a = NULL; не делает то, что вы ожидали. Он определяет глобальную переменную с именем a, которая является указателем на нестатический член List типа name.

Определение List::a должно быть

name* List::a = NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...