Как инициализировать const std :: vector <MyClass> - PullRequest
0 голосов
/ 07 мая 2018

У меня есть класс контейнера, подобный этому

class Container {
  public:
    Container(const std::string name, const double value)
        : name(name), value(value),{};
    const std::string name;
    const double value;
};

и мне нравится инициализировать const std::vector<Container>.

Это

const std::vector<Container> sets{{"foo", 0}, {"bar", 1}};

отлично работает, используя компилятор intel (версия 15.0.3 (совместимость с gcc версии 4.8.2)) и c ++ 11 enable (-std=c++11), это работает с RedHat6, но не работает под Windows7. Компилятор такой же, но интерфейс - visual studio 2013.

Я получаю сообщение об ошибке:

 no operator "=" matches these operands
           operand types are: Container = Container
           _Right = _Move(_Tmp);

Нужно ли мне писать свой собственный конструктор копирования?

Полный пример:

#include <vector>
#include <string>

class Container {
  public:
    Container(const std::string name, const double value) : name(name), value(value){};
    const std::string name;
    const double value;
};

int main() {
    const std::vector<Container> sets{{"foo", 0.0},{"bar", 1.0}};
}

1 Ответ

0 голосов
/ 07 мая 2018

Я попытался скомпилировать ваш код с VS2015, и он прекрасно компилируется.

Я думаю, вы просто нажали на ошибку компилятора. Я бы предложил обновить ваш компилятор C ++ до более новой версии с улучшенной поддержкой C ++.

P.S. Обратите внимание, что VS2015 также поддерживает Windows 7.

...