2014-12-04 59 views
-2

我正在嘗試安裝使用CPP構建的程序。請提供有關以下錯誤的建議。安裝cpp程序時出錯

pfm.cpp: In member function ‘void CPfm::read_pcm(std::ifstream&, bool): 
pfm.cpp:539:29: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 
     sid = mygetline(f,"ID"); 
          ^
pfm.cpp:549:29: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 
     sp0 = mygetline(f,"P0"); 
          ^
+0

這些只是警告。 – 2014-12-04 16:27:44

回答

0

這是因爲有一個常量字符串,而不是一個字符指針爲mygetline第二個參數。 但這只是一個警告,不是一個錯誤,編譯器似乎是可以的。

+0

我明白這是一個警告,但是當我運行該程序時,我得到這個:read_pcm中的錯誤:無法找到以ID開頭的行。 read_pcm中的錯誤:無法找到以P0開頭的行。 – user2985098 2014-12-04 16:32:42

+0

該編譯器可能對它有用,但現代的編譯器不會,如果該函數試圖修改該字符串,程序也不會。 – 2014-12-04 16:32:51

+0

這裏是代碼:void CPfm :: read_pcm(ifstream的&F,布爾bsequences) { //搜索ID標籤 嘗試 { SID = mygetline(F, 「ID」); strim(sid); } catch(ELineNotFound) { cerr <<「read_pcm中的錯誤:無法找到以ID開頭的行。\ n」; } //搜索P0標籤 string sp0; 嘗試 { sp0 = mygetline(f,「P0」); } catch(ELineNotFound) { cerr <<「read_pcm中的錯誤:無法找到以P0開頭的行。\ n」; exit(1); } – user2985098 2014-12-04 16:33:37

2

這意味着mygetline需要一個非const char*參數,但是您將它傳遞給一個常量字符串文字的指針。現在這是一個錯誤;但是你的編譯器正在使用過時的規則,在這種規則下它只被棄用,所以你只會得到一個警告。

如果mygetline不修改其字符串參數,那麼理想情況下,您可以通過將const添加到其聲明中來強制執行該操作。然後,像你一樣,傳遞一個常量是安全的。否則,您可以忽略或禁用該警告,並且在更新編譯器之前它不會成爲問題。

如果它確實修改了它的參數,那麼使const不是一個選項,那麼你不能將字符串文字傳遞給它。你需要一個可修改的數組,如

char bodge[] = "ID"; 
sid = mygetline(f,bodge);