编译错误:error: default argument given for parameter 1 of ‘’

来源:互联网 发布:类似知乎的平台 编辑:程序博客网 时间:2024/05/17 08:47

[+]

问题:

编译时出现错误提示如下:

[cpp] view plaincopyprint?
  1. u1204@u1204-zhw:~/hwsvn/2sw/4prj_mips/UCP_rt5350/src/trunk$ make  
  2. g++ -g3 -Wall -o0 -c ini_file.cpp -o ini_file.o  
  3. ini_file.cpp:17:117: error: default argument given for parameter 1 of ‘IniFile::IniFile(const string&, std::string, std::string, std::string)’ [-fpermissive]  
  4. ini_file.h:15:14: error: after previous specification in ‘IniFile::IniFile(const string&, std::string, std::string, std::string)’ [-fpermissive]  
  5. ini_file.cpp:17:117: error: default argument given for parameter 2 of ‘IniFile::IniFile(const string&, std::string, std::string, std::string)’ [-fpermissive]  
  6. ini_file.h:15:14: error: after previous specification in ‘IniFile::IniFile(const string&, std::string, std::string, std::string)’ [-fpermissive]  
  7. ini_file.cpp:17:117: error: default argument given for parameter 3 of ‘IniFile::IniFile(const string&, std::string, std::string, std::string)’ [-fpermissive]  
  8. ini_file.h:15:14: error: after previous specification in ‘IniFile::IniFile(const string&, std::string, std::string, std::string)’ [-fpermissive]  
  9. ini_file.cpp:17:117: error: default argument given for parameter 4 of ‘IniFile::IniFile(const string&, std::string, std::string, std::string)’ [-fpermissive]  
  10. ini_file.h:15:14: error: after previous specification in ‘IniFile::IniFile(const string&, std::string, std::string, std::string)’ [-fpermissive]  
  11. make: *** [ini_file.o] Error 1  
  12. 1204@u1204-zhw:~/hwsvn/2sw/4prj_mips/UCP_rt5350/src/trunk$  
源程序文件ini_file.cpp:

[cpp] view plaincopyprint?
  1. IniFile::IniFile(const string& filename, const string delim, const string sec_delim_l, const string sec_delim_r)  
  2.     : ini_filename_(filename), delim_(delim), sec_delim_l_(sec_delim_l), sec_delim_r_(sec_delim_r), is_dirty_(false), is_saved_(false) {  
  3.     Load(ini_filename_);  
  4. }  
头文件ini_file.h:

[cpp] view plaincopyprint?
  1. class IniFile {  
  2. public:  
  3.     IniFile(const string& filename = ""const string delim = "="const string sec_delim_l = "["const string sec_delim_r = "]");  
  4.     ~IniFile();  
  5. };  
错误在什么地方呢?

解决办法:

1. 原因肯定是由于构造函数使用默认参数造成的。

C++规则,只可能对排列在最后的那些参数提供默认参数,本程序并未违反这一个规则。

查看《C++程序设计语言(特别版)》第202~203页,类Date的声明中构造函数同时声明了缺省参数,而在构造函数的定义中则没有再次声明缺省参数。

参照Date类使用缺省参数的方式,将构造函数定义中的缺省参数声明清除,再次编译,成功通过。

[cpp] view plaincopyprint?
  1. u1204@u1204-zhw:~/hwsvn/2sw/4prj_mips/UCP_rt5350/src/trunk$ make  
  2. g++ -g3 -Wall -o0 -c main_ctrl.cpp -o main_ctrl.o  
  3. g++ -o local_ctrl main_ctrl.o msgrcv_cmd.o controller.o thread.o ini_file.o dataparse.o msgsnd_data.o sensor_reader.o cJSON.o -L../../drivers -lpthread -lphysicalop -lm  
  4. u1204@u1204-zhw:~/hwsvn/2sw/4prj_mips/UCP_rt5350/src/trunk$  

问题解决。


进一步的结论:既可以在类的声明中,也可以在函数定义中声明缺省参数,但不能既在类声明中又在函数定义中同时声明缺省参数。

参考地址:http://stackoverflow.com/questions/13295530/this-is-a-new-compile-error-for-me

原创粉丝点击