为什么它在Visual Studio 2012中不起作用?

时间:2013-12-03 23:06:35

标签: c++ visual-studio-2012

我正在尝试创建简单的数据库引擎。我的结构有问题。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

    struct LICZBY
    {
        int wartosc;
    };

    struct STUDENCI
    {
        int indeks;
        string imie;
        string nazwisko;
    };

    struct PRZEDMIOTY
    {
        int id;
        string nazwa;   // auto
        int semestr;    // clamp (1/10)
    };

    struct SALE
    {
        string nazwa;
        int rozmiar;    // clamp (10/600)
        bool projektor;
        double powierzchnia;
    };

    struct TABLES
    {
        vector<LICZBY> liczby;
        vector<STUDENCI> studenci;
        vector<PRZEDMIOTY> przedmioty;
        vector<SALE> sale;
    };

int main() {
    TABLES tables;
    tables.liczby.push_back({1});

    cout << tables.liczby[0].wartosc;

    // your code goes here
    return 0;
}

我正在使用Visual Studio 2012.此代码返回错误:预期表达式(此处为 tables.liczby.push_back({1}); ),但代码可在ideone.com上运行。 http://ideone.com/fork/zc9pz8

有什么问题?请给我一些建议。

2 个答案:

答案 0 :(得分:3)

VS2012尚不支持C ++ 11统一初始化语法/语义,这是{1}在此上下文中工作所需的。

  • 此时不能将其重写为VS2012的单行(除非您在LICZBY类中声明转换构造函数)。对于LICZBY的原始定义,您只能将其重写为

    const LICZBY liczby = { 1 };
    tables.liczby.push_back(liczby);
    
  • 如果添加转化构造函数

    struct LICZBY
    {
        int wartosc;
        LICZBY(int wartosc) : wartosc(wartosc) {}
    };
    

    然后你就可以做到了

    tables.liczby.push_back(1);
    

答案 1 :(得分:1)

这一行:

tables.liczby.push_back({1});

正在尝试使用初始化列表。这由ideone上使用的gcc版本支持,但VS2012为not supported。在这种情况下,这是一个简单的解决方法:

tables.liczby.push_back(LICZBY(1));