編集:
- 名前空間 std を使用しています
- 私は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 >>」と同一でも共変でもありません
これは、Option のサブクラスである RoomOption.hpp の次のコードに関連しています。
public:
shared_ptr<Room> getRoom();
私が問題を抱えている2つのクラスのすべてのコードは次のとおりです。
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;
}