gpt4 book ai didi

c++ - 将 "No known conversion"作为参数传递时来自 const 的 "this"

转载 作者:行者123 更新时间:2023-11-30 02:56:13 25 4
gpt4 key购买 nike

我目前正在制作一款使用状态堆栈管理器的游戏,该管理器跟踪所有不同的游戏状态,例如主菜单。

但是,我遇到了一个我似乎无法解决的问题。

这是状态类,被精简为只包含有问题的代码:

class StateManager;

namespace first {
namespace second {

class State {
friend class StateManager;
protected:
/**
* Associates the state with the specified state manager instance.
* @param stateManager The instance to associate this state with
*/
void associateWithManager(StateManager *stateManager) {
mStateManager = stateManager;
}
private:
StateManager *mStateManager;
};

} // second
} // first

以下是状态管理器,也被精简了:

namespace first {
namespace second {

class StateManager {
public:
/**
* Adds a state to the stack.
* @param state The state to add
*/
State &add(State &state) {
state.associateWithManager(this);
return state;
}
};

} // second
} // first

当我尝试编译它时,出现以下错误(行号有点偏离,因为我包含了守卫等):

src/StateManager.cc: In member function 'State& StateManager::add(State&)':
src/StateManager.cc:7:34: error: no matching function for call to 'State::associateWithManager(StateManager* const)'
src/StateManager.cc:7:34: note: candidate is:
In file included from ./include/StateManager.h:4:0,
from src/StateManager.cc:1:
./include/State.h:29:10: note: void State::associateWithManager(StateManager*)
./include/State.h:29:10: note: no known conversion for argument 1 from 'StateManager* const' to 'StateManager*'

显然,this 指针被视为 const 指针,即使我没有在 add 方法上使用 const 关键字.我不确定这里到底发生了什么。 this 指针总是const 吗?我很确定我过去曾以这种方式使用它,但没有出现任何问题。

此外,我的处理方式是否“正确”?或者在让国家了解经理方面是否有更好的解决方案?也许使用单例,但我不太喜欢它。

编辑:我现在意识到 namespace 外的前向声明是造成这种情况的原因。我应该接受迈克的回答,因为它帮助我得出了这个结论吗?还是我应该发布自己的?

最佳答案

这是唯一的错误吗?当我编译它时,我首先得到这个错误:

test.cpp:8:31: error: ‘StateManager’ has not been declared

声明一个类为友元时,该类必须已经声明过,否则忽略声明。所以需要在定义class State之前,在周围的命名空间中声明class StateManager;。通过该更改,您的代码可以为我编译。

关于c++ - 将 "No known conversion"作为参数传递时来自 const 的 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15835729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com