2015-11-07 79 views
0

我寫一個程序,讀取一起含有我的數據與測量例如爲單位的文本文件:讀取前綴在C++

8.9837 ns , 8.9826 ns , 8.8998 ns , 9.0433 ns , 143.5 ps 
13.037 ns , 13.027 ns , 12.983 ns , 13.075 ns , 91.1 ps 
-16.18 mV , -17.842 mV , -39.78 mV , -9.44 mV , 30.34 mV 

我使用fgets讀取每個行,然後strtok以除去空間和昏迷。試圖實現一個簡單的函數來轉換我的測量單位的前綴時,我的問題就出現了。該功能收到char*並返回double。似乎很簡單,但編制的回報:

error: ‘prefixing’ was not declared in this scope 

這裏是我的功能:

double prefixing(char * prefixit) 
{ 
    if(strspn(prefixit, "m") == 1) return 1e-3; 
    ... 
    return 1.; 
} 

,這裏是我怎麼稱呼它:

char * p = strtok (line,spliter); 
double prefix = prefixing(p); 

什麼我做錯了什麼建議將不勝感激。

乾杯,

+2

你是指後綴而不是前綴? –

+1

嗯,是的,不是...... 它是測量單位的前綴,但是您是對的,它是值的後綴。或者我可能會得到它完全錯誤:D – lazaraza

+0

你在哪裏聲明的功能。你如何將它包含在主函數中? – vincent

回答

2

大概prefixing被調用該方法的線之後定義。這是不允許的,你需要移動定義或向前聲明它讓編譯器知道該函數存在,例如:

double prefixing(char*); // forward declaration 

... 
double prefix = prefixing(p); 
... 

double prefixing(char* prefixit) { // definition 

} 
+0

是的,就是這樣。非常感謝! 有沒有辦法啓用這種錯誤的某種警告? – lazaraza

+0

編譯器錯誤本身就是一個警告,它是一個嚴重的警告,因爲它會停止編譯。通常,警告與語法上正確的代碼相關,但可能會暴露運行時問題,這是因爲編譯器在該階段之前暫停,因此這裏不是這種情況。 – Jack