Как исправить ошибку при инициализации вектора структуры - PullRequest
0 голосов
/ 01 января 2019

Это мой код.(C ++ 98)

struct node
{
    string name;
    string help;
    string action;
    string pName;
    string pHelp;
};

vector<node> commands {
    node{"name1", "help1", "", "", ""},
    node{"name2", "help2", "action2", "pname", "phelp"}
};

Ошибка

определение функции не объявляет параметры

1 Ответ

0 голосов
/ 01 января 2019

Вы, вероятно, используете старый компилятор, но следуете новому учебнику или книге.gcc 5.4.0 дает следующее:

test.cpp:12:27: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
    vector <node> commands {
                           ^
test.cpp:13:10: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
      node{"name1","help1", "", "" , ""}, node{"name2", "help2","action2",    "pname", "phelp"}
          ^
test.cpp:13:46: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
      node{"name1","help1", "", "" , ""}, node{"name2", "help2","action2",    "pname", "phelp"}
                                              ^
test.cpp:14:6: error: in C++98 ‘commands’ must be initialized by constructor, not by ‘{...}’
      };

Что ясно говорит о том, что вы должны использовать как минимум c ++ 11 или предоставить конструктор для node, который принимает пять параметров и использует старый стильдля создания объектов.

Если у вас нет особых причин придерживаться c ++ 98, я бы сказал, что переход на C ++ 11 - лучший вариант.В противном случае, пожалуйста, следуйте книгам или учебным пособиям, которые учат C ++ 98 или хотя бы описывают, как все было по-другому в C ++ 98, чтобы избежать таких проблем.

...