【发布时间】:2025-12-25 14:35:11
【问题描述】:
我有以下代码:
#include <fstream>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct node{
vector<int> vic;
bool visitato = false;
};
int main (){
vector<node> grafo;
ifstream in("input.txt");
int n, m, s, from, to;
in >> n >> m >> s;
grafo.resize(n);
for (int i = 0; i < m; i++){
in >> from >> to;
grafo[from].vic.push_back(to);
}
for (int i = 0; i < grafo.size(); i++)
for(int j = 0; j < grafo[i].vic.size(); j++)
cout << "From node " << i << " to node " << grafo[i].vic[j] << endl;
}
并且(在 Ubuntu 上)我输入以下命令:
/usr/bin/g++ -DEVAL -static -O2 -o visita visita.cpp -std=c++0x
我收到以下错误:
visita.cpp:10:21: sorry, unimplemented: non-static data member initializers
visita.cpp:10:21: error: ISO C++ forbids in-class initialization of non-const static member ‘visitato’
在我家它工作得很好,但在大学里却不行。我们的老师已经发布了要执行的命令。那为什么它在大学里不起作用,而在我家却起作用?
【问题讨论】:
-
g++ 的不同版本。你的比较晚,支持 C++11 的类内初始化特性,大学不支持。
-
它告诉你出了什么问题。你大学的编译器不支持 C++11 非静态数据成员初始化器。 REF: visita.cpp:10:21: 抱歉,未实现:非静态数据成员初始化器
-
添加到@AlexanderBrevig 的评论中,
struct node不是静态的,因此数据成员visitato的初始化程序= false未在您在家使用的 GCC 中实现。使用gcc --version获取家庭和大学的编译器版本。此外,使用-std=c++11,因为-std=c++0x已被弃用。 -
好吧,我的 gcc 版本在 uni 是 4.6.3。但是,如果他知道我们必须在这些 pc 上工作,他为什么要告诉我们使用该命令? ... :\ PS,我尝试输入
std=c++11但它不起作用:cc1plus: error: unrecognized command line option ‘-std=c++11 -
@bogALT:确实,那个古老的编译器不会识别
c++11,只能识别旧名称c++0x,现在已弃用。您应该在现代编译器上指定c++11,如果这不起作用,则不要期望完整的 C++11 支持。
标签: c++ struct compiler-errors non-static