- 我使用空間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