2014-12-04 91 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);