- 我使用空间std
- 我使用VS10
- 室是一个单独的类
- 我已经包括在所述存储器中头所有必需的文件
原始错误是我在构建之前得到的Intellisense错误。建成后,我得到了一个更buttload:
- [原智能感知错误之前建设]声明是“的std :: TR1 :: shared_ptr的< <错误类型>>选项不兼容:: getRoom( )
- 'std :: tr1 :: shared_ptr < _Ty> Option :: getRoom(void)':重载函数仅与返回类型不同,返回类型为'std :: tr1 :: shared_ptr选项:: getRoom(void)'
- 'Option :: getRoom':重新定义;不同的基本类型
- '选项:: getRoom”使用未定义类的std :: TR1 :: shared_ptr的“
这些与此相关的一段代码在Option.cpp:
shared_ptr<Room> Option::getRoom(){
shared_ptr<Room> room(new Room);
return room;
}
在Option.hpp相应的代码:
public:
virtual shared_ptr<Room> getRoom();
- 错误 'RoomOption :: getRoom':重写虚函数返回类型不同并且不covaria nt from'Option :: getRoom'
- [智能感知]返回类型与返回类型“std :: tr1 :: shared_ptr < <错误类型>>”被重写的虚拟函数函数“不相同也不协变”。 getRoom”
这与这段代码在RoomOption.hpp,选项的子类:
public:
shared_ptr<Room> getRoom();
这里是所有的代码,我遇到问题的两个班:
Option.h:
#pragma once
#include "Room.h"
#include <memory>
using namespace std;
class Option
{
protected:
int id;
char* text;
public:
Option(void);
Option(int, char*);
virtual ~Option(void);
char* getText();
int getID();
virtual shared_ptr<Room> getRoom();
};
Option.cpp:
#include "Option.h"
#include "Room.h"
#include <memory>
using namespace std;
Option::Option(void)
{
}
Option::Option(int newID, char* newText){
id = newID;
text = newText;
}
Option::~Option(void)
{
}
char* Option::getText(){
return text;
}
int Option::getID(){
return id;
}
shared_ptr<Room> Option::getRoom(){
shared_ptr<Room> room(new Room());
return room;
//note that this function will never be used. I'd prefer to
//pass back a null pointer but I couldn't do that either.
}
RoomOption.h:
#pragma once
#include "Option.h"
#include "Room.h"
#include <memory>
using namespace std;
class RoomOption :
public Option
{
private:
shared_ptr<Room> room;
public:
RoomOption(void);
RoomOption(int, char*, shared_ptr<Room>);
~RoomOption(void);
void setRoom(shared_ptr<Room>);
shared_ptr<Room> getRoom();
};
RoomOption。CPP:
#include "RoomOption.h"
#include "Room.h"
#include <memory>
using namespace std;
RoomOption::RoomOption(void)
{
}
RoomOption::RoomOption(int newID, char* newText, shared_ptr<Room> newRoom)
{
id = newID;
strcpy(text, newText);
room = newRoom;
}
RoomOption::~RoomOption(void)
{
}
void RoomOption::setRoom(shared_ptr<Room> newRoom){
room = newRoom;
}
shared_ptr<Room> RoomOption::getRoom(){
return room;
}
你是否在任何地方使用'namespace std;'或其他'using'声明? – 2012-07-12 18:51:55
我无法重现这个问题,你能发布一个完整的样本来重现问题吗?你使用哪个版本的VS? – ctor 2012-07-12 18:52:30
在'Option'类中声明'Room'类型?然后你需要在你的.cpp文件中写入'shared_ptr