请帮帮我,为什么我的代码无法编译, 编译器抱怨说: 错误C2629:意外的“StringToAnsi(” 错误C2334:“{”的前面有意外标记;跳过明显的函数体 错误C2629:意外的“StringToAnsi(” ... 这是我的代码:
#using <System.dll>
#using <mscorlib.dll>
class StringToAnsi
{
private:
void * m_ptr;
public:
StringToAnsi( System::Object ^ str)
{
m_ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(safe_cast<System::String^>(str)).ToPointer();
}
StringToAnsi(System::String ^ str)
{
m_ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str).ToPointer();
}
~StringToAnsi()
{
System::Runtime::InteropServices::Marshal::FreeHGlobal(System::IntPtr(m_ptr));
}
operator const ACHAR*()
{
return (const ACHAR*)m_ptr;
}
答案 0 :(得分:0)
因为你有两个具有相同参数数量的构造函数。有一个Object和一个String,但它们都是一个Object。所以这看起来很模糊。
当你创建两个方法(或构造函数)时,你不能让它们具有相同数量的参数,因为编译器不知道要调用哪个。
当你将字符串放入构造中时:new StringToAnsi("bla")
。编译器不知道要使用哪个构造函数。