我收到编译错误
test.cpp(21):错误C2676:二进制'+':'Manager ^'没有定义 此运算符或转换为预定义可接受的类型 操作
尝试编译以下程序时。
public ref class Managed {};
public ref class Manager {
public:
Manager^ operator += (Managed^ m) { list->Add(m); return this; }
private:
System::Collections::Generic::List<Managed^>^ list;
};
public ref class Foo {
public:
property ::Manager^ Manager {
::Manager^ get() { return manager; }
}
private:
::Manager^ manager;
};
int main() {
Foo^ foo = gcnew Foo;
foo->Manager += gcnew Managed; // Line 21
}
当我将main
函数替换为下面的函数时,程序将编译。
int main() {
Foo^ foo = gcnew Foo;
Manager^ mgr = foo->Manager;
mgr += gcnew Managed;
}
两者之间的本质区别是什么,使得一个编译而不是另一个?
答案 0 :(得分:2)
根据MSDN documentation,operator+=
不是允许的C ++ / CLI用户定义运算符之一。相反,应定义operator+
,编译器会将+=
翻译为+
,然后=
(分配)。
如果您在operator+
课程中添加了Manager
,然后将set(::Manager^)
添加到Foo::Manager
媒体资源中,则第21行会进行编译。