C ++ конструктор управляемого класса не может иметь параметры? - PullRequest
0 голосов
/ 17 марта 2011

, пожалуйста, помогите мне, почему мой код не может скомпилироваться, компилятор жалуется, что: ошибка 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 голосов
/ 17 марта 2011

Потому что у вас есть два конструктора с одинаковым количеством параметров. Есть Объект и Строка, но оба являются Объектом. Так что это кажется очень двусмысленным.

Когда вы создаете два метода (или конструктора), вы не можете позволить им иметь одинаковое количество параметров, потому что компилятор не знает, какой из них вызывать.

Когда вы вставляете строку в конструкцию следующим образом: new StringToAnsi("bla"). Компилятор не знает, какой конструктор использовать.

...