2014-11-06 102 views
1

我有以下代碼:C++:未用:非靜態數據成員初始化

#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’ 

在我的家裏它工作正常,但在大學它沒有。我們的老師發佈了要執行的命令。那麼爲什麼它不在大學工作,但它在我的家呢?

+1

不同版本克++的。你們是後來支持C++ 11的課堂初始化功能,大學一開始沒有。 – Angew 2014-11-06 13:26:26

+4

它告訴你什麼是錯的。您所在大學的編譯器不支持C++ 11非靜態數據成員初始值設定項。 REF:visita.cpp:10:21:對不起,未實現:非靜態數據成員初始化符 – AlexanderBrevig 2014-11-06 13:26:42

+1

通過@AlexanderBrevig添加到註釋中,'struct node'不是靜態的,所以數據成員''false'的初始化符'= false' '在您家中使用的GCC中沒有實現。使用'gcc --version'在家裏和大學都可以獲得編譯器版本。此外,使用'-std = C++ 11',因爲'-std = C++ 0x'已被棄用。 – DevSolar 2014-11-06 13:30:47

回答

5

非靜態數據成員初始值設定項自GCC 4.7開始可用。因此,請檢查您的GCC版本。

2

解決與此代碼:

struct node{ 
    vector<int> vic; 
    bool visitato; 
    node() : visitato(false) {}  
};