C ++ - 方法声明不兼容

时间:2012-07-12 18:42:12

标签: c++ visual-c++

编辑:

  • 我正在使用命名空间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]返回类型与返回类型“std :: tr1 :: shared_ptr&lt;&lt; error-type&gt;&gt;”不相同或协变被覆盖的虚函数函数“Option :: getRoom”

这与RoomOption.hpp中的这段代码有关,它是Option的一个子类:

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;
}

2 个答案:

答案 0 :(得分:0)

此代码在/ W4 / WX与VS 2010编译时没有错误:

#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;
}

你有什么不同的做法?

答案 1 :(得分:-1)

Room是否在Option.hpp的getRoom()调用中使用了()

您是否尝试从new Room()移除{{1}},以防您以某种方式被most vexing parse击中,可能在我们看不到的其他代码中?