我正在尝试创建简单的数据库引擎。我的结构有问题。
#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
有什么问题?请给我一些建议。
答案 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));