-1

編集:

  • 名前空間 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;
}
4

2 に答える 2

0

このコードは、VS 2010 で /W4 /WX でエラーなしでコンパイルされます。

#include <memory>

struct Room {};

class Option {
  public:
    std::shared_ptr<Room> getRoom();
};

std::shared_ptr<Room> Option::getRoom(){
    std::shared_ptr<Room> room(new Room());
    return room;
}

int main() {
  Option opt;
  std::shared_ptr<Room> room = opt.getRoom();
  return 0;
}

あなたは何を違うのですか?

于 2012-07-12T19:49:45.080 に答える
-1

Option.hppの呼び出しでRoom使用されている場所で宣言されていますか?getRoom()

おそらく私たちが見ることができない他のコードで、最も厄介な parseに何らかの形でヒットした場合に備えて、 ()fromを削除しようとしましたか??new Room()

于 2012-07-12T18:57:09.350 に答える