C++:关键字错误'this'
C++: Error with 'this' keyword
我正在尝试在 c++ 中创建一个 poptart 自动售货机程序,并且我正在尝试使用 this 关键字,但是我总是收到一条错误消息,指出"this"只能在非静态成员函数中使用。下面是我遇到一个此类问题的代码的一部分
法典:
#include <iostream>
#include "HasCredit.h"
using namespace std;
void insertMoney(int money)
{
cout<<"You inserted: " << money;
money = money+this->currentContext->getStateParam(Credit);
this->currentContext->setStateParam(Credit,money);
cout<< "Total: "<<money<<endl;
this->currentContext->setState(Has_Credit);
}
关于我为什么收到此错误的任何建议将不胜感激。干杯。
编辑:insertMoney方法位于一个名为HasCredit的类中。
Edit2:成员声明现在在构造函数外部进行
编辑3:添加了状态类声明
类定义代码如下:
#include <iostream>
#include "State.h"
#include "StateContext.h"
using namespace std;
class HasCredit: public State
{
HasCredit (StateContext* Context) : State(Context) {
}
void insertMoney(int);
void MakeSelectionCoating(int);
void MakeSelectionFilling(int);
void moneyRejected(void);
void addPopTarts(int);
void dispense(void);
};
状态类声明代码如下所示:
#include <iostream>
#include "Transition.h"
using namespace std;
class State: public Transition
{
protected:
StateContext* currentContext;
public:
State(StateContext* Context);
};
this
指针仅在类内有效。您的insertMoney
函数未声明为在类中。请参阅 http://www.learncpp.com/cpp-tutorial/87-the-hidden-this-pointer/。
在insertMoney
的定义中(在代码中,而不是在类中),您不会将其声明为 hasCredit
的成员。您需要改用void hasCredit::insertMoney
。
希望将insertMoney
附加到类。 尝试在定义中ClassName::insertMoney
。
错误准确地告诉您为什么得到它。
解决方案是修复要成为成员函数的定义,以便编译器知道它是成员函数。 喜欢这个:
// vv THIS WAS MISSING
void HasCredit::insertMoney(int money)
{
...
问题中显示的会员声明也放在错误的位置。 它们需要位于类主体内部,但在构造函数外部。 重写虚拟成员函数时,您可能希望使用 virtual
和 override
关键字向读者显示这一点。 (注意,override
仅在您有新的 C++11 编译器时才有效。 对于较旧的编译器,请使用注释/* override */
改用)
class HasCredit: public State
{
HasCredit (StateContext* Context) : State(Context) { }
// vv THIS....................CANNOT BE INSIDE HERE ^^
virtual void insertMoney(int) override;
...
};
您可能也希望您的一些成员也public
。
有几点是错误的:
类定义:
#include <iostream>
#include "State.h"
#include "StateContext.h"
using namespace std;
class HasCredit: public State
{
HasCredit (StateContext* Context) : State(Context) {
}
void insertMoney(int);
void MakeSelectionCoating(int);
void MakeSelectionFilling(int);
void moneyRejected(void);
void addPopTarts(int);
void dispense(void);
};
请注意,应在构造函数定义之外声明这些方法。
对于实施:
#include <iostream>
#include "HasCredit.h"
using namespace std;
void HasCredit::insertMoney(int money)
{
cout<<"You inserted: " << money;
money = money+this->currentContext->getStateParam(Credit);
this->currentContext->setStateParam(Credit,money);
cout<< "Total: "<<money<<endl;
this->currentContext->setState(Has_Credit);
}
该方法必须使用类的名称进行限定...否则它将被视为函数的定义...并且函数没有这个
- C++错误:"error: int aaa::bbb is protected within this context"
- 类中的数组变量C++导致"was not declared in this scope"实现文件的一个函数中错误,但在构造函数中不会导致错误
- 错误:类没有名为"ThisW"的成员;你是说"这个"吗?但是代码没有说"ThisW",它已经说了"This"
- C++ 中的构造函数、继承、堆栈、堆、this-pointer 和段错误
- C++ Boost - 序列化错误 - 将"const B"作为"this"参数
- 整体模板参数。错误:在常量表达式中使用'this'
- 如何解决"cout was not declared in this scope"错误?
- 从 std::ostream 重载 << 运算符时,为什么编译器会给出"too many parameters for this operator function"错误?
- 即使包含 <time.h 后仍"‘CLOCK_PER_SEC’ was not declared in this scope"错误>
- 使用 boost::序列化代码将 *this 传递给模板函数会产生错误
- С 错误"s1, s2 are used uninitialised in this function"
- 有没有办法绕过错误"因为'this'参数会丢弃限定符?
- 为什么直接传递"this"指针来存档是一个错误,而另一个相同类型的指针是可以的?
- "this" Lambda 捕获的是不正确的。海湾合作委员会编译器错误?
- C++ 中的"this declaration has no storage class or type specifier"错误
- Windows 10 环境中的"This version of XAudio2 is available only in Windows 8"错误
- C++错误:将"const umap_int {aka const std::unordered_map<int, int>}"作为"this"参数会丢弃限定符 [-permissive]
- 错误:将 x 作为 x 的参数传递'this'丢弃限定符
- 尝试使用指针时出现预期表达式"this"错误
- 修复 C++ 中的"this"错误