c ++托管类构造函数不能有参数?

时间:2011-03-17 15:00:24

标签: managed-c++

请帮帮我,为什么我的代码无法编译, 编译器抱怨说: 错误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;
    }

1 个答案:

答案 0 :(得分:0)

因为你有两个具有相同参数数量的构造函数。有一个Object和一个String,但它们都是一个Object。所以这看起来很模糊。

当你创建两个方法(或构造函数)时,你不能让它们具有相同数量的参数,因为编译器不知道要调用哪个。

当你将字符串放入构造中时:new StringToAnsi("bla")。编译器不知道要使用哪个构造函数。