以下是代码:
#include <iostream>
using namespace std;
template<class OwnerType>
class Move {
public:
Move() {}
Move(OwnerType &_owner) {
owner = &_owner;
}
void GetPosition() {
cout << owner->x << endl;
}
OwnerType *owner;
};
class Entity {
public:
int x = 50;
Move<Entity> *move;
};
int main() {
Entity en;
en.x = 77;
en.move = new Move<Entity>(en); // sign '=' is underlined by VS
en.move->GetPosition();
return 0;
}
它给出错误:
a value of type "Move<Entity> *" cannot be assigned to an entity of type "Move<Entity> *"
程序正在编译,按预期工作并给出预期值,但错误仍在此处。 这可能与模板和编译时间和内容有关,但我没有足够的知识来知道这个错误实际代表什么。
也不要担心泄漏,因为这只是我测试,错误是我不明白的。
提前致谢。
答案 0 :(得分:1)
所以它不是错误。
是Intellisense:
见:
Error 'a value of type "X *" cannot be assigned to an entity of type "X *"' when using typedef struct
Visual Studio 2015: Intellisense errors but solution compiles
旧:
您的main
需要()
:
这对我有用:
#include<iostream>
using namespace std;
template<class T> class Move {
public:
Move() {}
Move(T &_owner) {
owner = &_owner;
}
void GetPosition() {
cout << owner->x << endl;
}
T *owner;
};
class Entity {
public:
int x = 50;
Move<Entity> *move;
};
int main(){
Entity en;
en.x = 77;
en.move = new Move<Entity>(en); // sign '=' is underlined by VS
en.move->GetPosition();
return 0;
}
输出:
77
答案 1 :(得分:1)
Intellisense以显示无效错误而闻名(例如参见Visual Studio 2015: Intellisense errors but solution compiles),信任编译器和链接器,如评论中所示。
但是,此错误非常烦人,请尝试关闭解决方案,删除.suo
文件(隐藏),然后重新打开。有关.suo
文件的详细信息Solution User Options (.Suo) File
旁注,代码示例main
中缺少()
。