关于operator string()和operator char*()在调用的时候冲突的编译错误,高手请帮忙一下,谢谢!
我的编译环境是:Windows 下的g++,即eclipse + CDT + MinGW环境,我是做代码移植的,最近碰到一个VC能编译通过,但GCC 3.2.3不能通过的问题,我用一个工程(eclipse工程,两个文件),这两个文件如下:
/* xml_str.h */
#ifndef XML_STR_H_
#define XML_STR_H_
#include <iostream>
#include <string>
using namespace std;
namespace fengxueyong
{
class MsgStr
{
public:
MsgStr()
{
s_str = " This is a string string";
std::cout<< "default constructor!\n";
}
MsgStr(std::string& str)
{
s_str = str;
std::cout<< " string constructor!\n";
}
MsgStr(const char * const cstr)
{
std::cout<< " char constructor!\n";
}
operator const char*() const
{
return char_str;
}
operator std::string() const
{
return s_str;
}
~MsgStr()
{
std::cout<<"XmlStr destructor\n";
}
private:
char* char_str;
std::string s_str;
};
} /* end of namespace fengxueyong */
#endif /*XML_STR_H_*/
/* xml_str.cpp */
#include <iostream>
#include "xml_str.h"
using namespace fengxueyong;
int main()
{
const char* charp = "This is a char*";
std::string a_string = "This is a string";
charp = (const char*)MsgStr(charp); // no error here
a_string = (std::string)MsgStr(a_string); // <==== g++ compiler error here
std::cout<< charp << std::endl;
std::cout<< a_string << std::endl;
}
用windows下的VC编译通过,但是用windows下的g++(MinGW)编译出错如下:
**** Full rebuild of configuration Debug for project XmlStr ****
make -k clean all
rm -rf ./xml_str.o ./xml_str.d XmlStr.exe
process_begin: CreateProcess((null), rm -rf ./xml_str.o ./xml_str.d XmlStr.exe, ...) failed.
make (e=2): 系统找不到指定的文件。
make: [clean] Error 2 (ignored)
' '
'Building file: ../xml_str.cpp'
'Invoking: GCC C++ Compiler'
g++ -O3 -Wall -c -fmessage-length=0 -oxml_str.o ../xml_str.cpp
../xml_str.cpp: In function `int main()':
../xml_str.cpp:12: error: call of overloaded `basic_string(fengxueyong::MsgStr)' is ambiguous
D:/MinGW/include/c++/3.4.2/bits/basic_string.tcc:224: note: candidates are: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
D:/MinGW/include/c++/3.4.2/bits/basic_string.tcc:181: note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
make: *** [xml_str.o] Error 1
make: Target `all' not remade because of errors.
Build complete for project XmlStr
现在肯定的是operator std::string() 和operator const char*()两个函数引起了冲突,但是用charp = (const char*)MsgStr(charp); 就没有错误,用a_string = (std::string)MsgStr(a_string); 就是有错。如果把两个运算符函数注释掉一个,一切OK,但是项目代码中大量有这样的用法,现在就是如何进行调用才能不让g++有这个错误,只要是保留这两个函数都可以,谢谢!!
急用,谁解决油高分送。