2013-06-24 50 views
-4

我試圖讓一個函數來獲取文件大小。我嘗試使用GetFileSizeEx,但無法獲得我想要的結果(我希望它是一個整數或雙精度),並比較它是否大於1MB。無論如何,我做了這個函數,但我得到一個錯誤,沒有聲明filenamestr。filenamestr沒有在這個範圍內聲明 - C++

int getsize(std::string const $filename); 
...  
    int getsize(std::string const $filenamestr) 
     { 
      std::fstream file(filenamestr); 
      file.seekg(0, std::ios::end); 
      return file.tellg(); 
     } 

我在做什麼錯?

+3

'$'從哪裏來? –

+2

'$'......我的眼睛......! – jrok

+1

@KonradRudolph它必須是某種cQuery –

回答

2

在C++中,您不用美元符號前綴變量名稱。刪除它應該解決您的問題:

int getsize(std::string const filename); 
...  
    int getsize(std::string const filenamestr) 
     { 
      std::fstream file(filenamestr); 
      file.seekg(0, std::ios::end); 
      return file.tellg(); 
     } 
+0

是的,我知道,我犯了一個錯字,花了最後30分鐘尋找一個答案,但沒有注意到它...:/已經習慣了PHP 另外,我還有一個問題,當這個問題解決了,反正我在什麼時候使用字符串的「&」一個函數? –

+0

'&'在PHP中的含義與它相同 - 意思是「通過引用傳遞」而不是「按值傳遞」。通常,當您將參數傳遞給函數時,該函數將接收該參數的*副本*。一個'&'可以改變你的函數的參數(例如,如果你在函數內部設置了'filenamestr =「」'),那麼函數的持續時間就是持續的。一旦函數返回,變化就消失了。使用&意味着該函數對傳入參數的同一副本進行操作,因此即使函數完成後,該函數的任何更改都會持續存在。 – IanPudney

+1

_「一旦函數返回,變量將恢復到其原始狀態。」_這是一個可怕的解釋方式。函數參數是一個不同的變量,原始的參數不會改變,並且不需要恢復,因爲它從未改變過。 –

1

現在,我知道你從PHP的時候,我能看到混亂的來源。 :)

參數名稱不需要與$一起作爲前綴。這個名字本身就可以做到。當您參考filenamestr時,它會查找具有該確切標識符的變量。但它並沒有看到它,因爲$也是一個標識符的有效字符,並且它使$filenamestr成爲一個完全不同的變量名稱。

1

美元符號$不應該用於變量名稱。儘管Visual C++支持它,但它不被C++標準支持。最好將它從參數中刪除,但錯誤是由於filenamestr$filenamestr兩個不同標識符的差異所致。

這將修復它。

int getsize(std::string const filename); 
...  
int getsize(std::string const filenamestr) 
    { 
     std::fstream file(filenamestr); 
     file.seekg(0, std::ios::end); 
     return file.tellg(); 
    }