2012-08-04 78 views
1

代碼:錯誤之前的預期令牌不合格-ID - 的std ::矢量

#include <vector> 
#include <iostream> 

typedef struct 
{ 
    std :: string latitude; 
    std :: string longitude; 
} coordinate; 

std :: vector <coordinate> previousPoints; 

int main() 
{ 
    coordinate.latitude = latitude; 
    coordinate.longitude = longitude; 
    previousPoints.push_back (coordinate); 

    return 0; 
} 

輸出:

[email protected]:~> g++ -Wall demo.cpp 
demo.cpp: In function ‘int main()’: 
demo.cpp:14:12: error: expected unqualified-id before ‘.’ token 
demo.cpp:15:12: error: expected unqualified-id before ‘.’ token 
demo.cpp:16:38: error: expected primary-expression before ‘)’ token 

那是什麼,我錯過了點?

回答

4

你需要創建一個實際變量被添加到您的載體:

int main() 
{ 
    coordinate c; 
    c.latitude = latitude; 
    c.longitude = longitude; 
    previousPoints.push_back (c); 
+0

我簡直不敢相信!哇,有時我可以如此健忘,謝謝 – 2012-08-04 11:17:11

+0

發生,大聲笑... – YePhIcK 2012-08-04 11:18:42

+2

一些編程風格強加了某些字母大小寫以避免這些問題。例如,如果您要**始終**用大寫字母命名您的數據類型,並且**永遠不要**爲您的標識符使用大寫字母,那麼您在輸入代碼時可以避免此問題,您可以在 – YePhIcK 2012-08-04 11:20:24

4
typedef struct 
{ 
    std :: string latitude; 
    std :: string longitude; 
} coordinate; 

coordinate是在匿名結構上的typedef,而不是對象。你應該在你的函數創建的coordinate對象,或者不使用typedef,即

struct coord 
{ 
    std :: string latitude; 
    std :: string longitude; 
} coordinate; 

現在,coordinate是對象。還有一個問題,爲什麼在std之後和::之後輸入空格?這是合法的,但很奇怪。

+0

我曾試過這兩種方式,沒有工作。 YePhlck發現了這個故障。 ::之後的空格使代碼看起來像「乾淨」到「我」。 – 2012-08-04 11:19:39

+0

@AnishaKaul Ehm ...第一種方法是創建座標主體(YePhlck提示這種方式),第二種方式 - 座標是類型座標的全局對象... – ForEveR 2012-08-04 11:22:13

+0

擁有全局變量幾乎不是一個好主意, d不要提出這是一個解決方案,TBH – YePhIcK 2012-08-04 11:23:16

1
coordinate.latitude = latitude; 

你需要一個對象來訪問它的成員,但coordinate只是名稱的結構。同樣在右側,你沒有價值...你需要類似的東西:

coordinate c; 
c.latitude = "120"; 
c.longitude = "10"; 
previousPoints.push_back(c); 
+0

的東西給你的類型加前綴謝謝,但是你遲到了。 :) – 2012-08-04 11:20:15

相關問題