编辑:
- 我正在使用命名空间标准
- 我正在使用 VS10
- 房间是一个单独的班级
- 我已经在所有必要的文件中包含了内存头
最初的错误是我在构建之前遇到的 Intellisense 错误。构建后,我得到了更多的对接:
- [构建前的原始 Intellisense 错误] 声明与 "std::tr1::shared_ptr<< error-type >> Option::getRoom() 不兼容
- 'std::tr1::shared_ptr<_Ty> Option::getRoom(void)' : 重载函数的不同之处仅在于返回类型与 'std::tr1::shared_ptr Option::getRoom(void)'
- 'Option::getRoom' : 重新定义;不同的基本类型
- 'Option::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”:覆盖虚函数返回类型不同,并且与“Option::getRoom”不协变
- [IntelliSense] 返回类型与被覆盖的虚函数函数“Option::getRoom”的返回类型“std::tr1::shared_ptr<< error-type >>”不相同也不协变
这与 RoomOption.hpp 中的这段代码有关,它是 Option 的子类:
public:
shared_ptr<Room> getRoom();
这是我遇到问题的两个类的所有代码:
选项.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();
};
选项.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.
}
房间选项.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();
};
房间选项.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;
}