2011-04-12 57 views
0

我知道有一些其他的帖子是這樣,但現在我已經對這個單一的錯誤了一個多小時,不能弄明白。這裏是一個的給麻煩C++不明原因的錯誤:錯誤:之前預計初始「和」令牌

istream& operator>>(istream& in, UndirectedGraph& g) 
{ 
    int numVerticies; 
    in >> numVerticies; 
    g = UndirectedGraph(numVerticies); 

    for(int i = 0; i < numVerticies; i++) 
    { 
     int temp; 
     in >> temp; 
     if(temp != i) 
     { 
      g.linkedAdjacencyList[i]->value = temp; 
     } 
    } 

    int edges; 
    in >> edges; 
    g.edges = edges; 
    for(int i = 0; i < edges; i++) 
    { 
     int first; 
     int second; 
     in >> first >> second; 
     addEdge(first, second); 
    } 
    return in; 
} 

ostream& operator<<(ostream& out, UndirectedGraph& g) 
{ 
    out << g.numVerticies << endl; 

    for(int i = 0; i < g.numVerticies; i++) 
    { 
     out << g.linkedAdjacencyList[i] << " "; 
    } 
    out << endl; 

    out << g.edges << endl; 

    for(int i = 0; i < g.numVerticies; i++) 
    { 
     out << linkedAdjacencyList[i]->value; 
     Node* whereto; 
     whereto = linkedAdjacencyList[i]->adj; 
     while(whereto->adj != NULL) 
     { 
      out << " " << whereto->value; 
      whereto->adj = whereto->adj->adj; 
     } 
    } 
    return out; 
} 

int main() 
{ 

    ifstream inFile; 
    inFile.open("hw8.in"); 

    UndirectedGraph graph; 
    inFile >> graph; 

...

這裏的代碼,錯誤都在線1和28,與istream和ostream的超載。

感謝您的幫助!

+0

什麼是線1和28? – 2011-04-12 13:11:51

+0

@Daniel istream和ostream聲明 – jlehenbauer 2011-04-12 14:06:47

回答

2

此:

void UndirectedGraph::istream& operator>>(istream& in, UndirectedGraph g) 

沒有意義!你可能想要:

istream& operator>>(istream& in, UndirectedGraph g) 

說了這麼多,你似乎沒有在你的函數定義中返回任何東西。

+0

這是真的,我完全忽略了這一點。正如所建議的那樣,我將行(istream和ostream)更改爲'UndirectedGraph :: istream&operator >>(istream&in,UndirectedGraph&g)'但現在我在'&'令牌 錯誤之前得到了預期的構造函數,析構函數或類型轉換 – jlehenbauer 2011-04-12 13:21:02

+0

@Jacob:如果對您的問題所做的修改具有代表性,那麼您還沒有對代碼進行正確的更改。再看看! – 2011-04-12 13:24:29

+0

如果它很重要,UndirectedGraph存在於包含的.h文件中,並且我從.cpp文件 – jlehenbauer 2011-04-12 13:24:36

1
void UndirectedGraph::istream& operator>>(istream& in, UndirectedGraph g) 

2種回到這裏類型:voidUndirectedGraph::istream&。一個需要去。另一種方法也一樣。

此外,我認爲你的意思是std::istream,不UndirectedGraph::istream,對不對?

最後,爲使此代碼正常工作,您需要通過引用傳遞參數g,否則您將無法更改它。

這給我們留下了:

std::istream& operator>>(std::istream& in, UndirectedGraph& g) 
+0

也告訴了查爾斯沃思,我在istream和ostream中ostream和ostream中取出了空白。現在我得到另一個錯誤? 預期構造,析構函數,或類型之前轉換「&」令牌 – jlehenbauer 2011-04-12 13:23:09

+0

@JacobL參見更新。 – 2011-04-12 13:51:07

+0

@Konrad:@Wakefield和@Oli說得對,在istream或ostream之前沒有'std ::'或'UndirectedGraph ::'。看到奧利的帖子上的評論,當我嘗試使用輸入運算符時,我收到一個新的錯誤 – jlehenbauer 2011-04-12 14:09:09

0

似乎有成爲一對夫婦的問題。首先,插入和提取操作符的成員方法還是隻是幫助函數?對於後者,簽名會像

istream & operator>>(istream& in, UndirectedGraph &g) 

對於前者

istream &UndirectedGraph::operator>>(istream& in, UndirectedGraph &g) 

在這兩種情況下,如上圖所示,你應該做的UndirectedGraph參數引用參數。否則,你只是通過值傳遞參數,這可能不是你想要的。

0

重申什麼// @唐 - 韋克菲爾德的一種表示。我想你想你的運營商返回的std :: istream的&和std :: ostream的&分別(而不是UndirectedGraph :: istream和UndirectedGraph :: ostream的)。

所以簽名會看起來像:

std::istream& UndirectedGraph::operator>>(istream& in, UndirectedGraph g) 
std::ostream& UndirectedGraph::operator<<(ostream& out, UndirectedGraph& g) 
相關問題