我试图在类中定义一个函数,然后在 .cpp 程序中使用它。我已经在 main 之上声明了该函数,但无法弄清楚为什么会收到“未在范围内声明”错误。
来自 g++ 的错误:“错误:‘convert’未在此范围内声明”
提前致谢。
啊:
class A
{
public:
int convert(char bcd);
};
程序.cpp:
#include "A.h"
#include <iostream>
#include<stdio.h>
using namespace std;
int A::convert(char b)
{
return b*5;
}
int main(){
char myword = '27';
char cc = convert(myword); //scope error here
cout << "Number is: " << cc << endl;
return 0;
}
最佳答案
错误本身是因为您没有任何名称 convert()
定义的“自由函数”它位于可以从您尝试调用它的范围直接访问的任何范围内。你有一个 class A
的成员方法(“函数”) ,但没有在该类之外定义。所以是的,你有一个名为 convert()
的“函数”已定义,但在您尝试调用它的范围内无法访问它。您必须添加一些内容来告诉编译器在哪里可以找到您尝试调用的“convert()
”函数。有几种方法可以做到这一点:
- 对于非静态类成员函数(当它是类的一部分时,通常称为“方法”),您首先需要该类类型的对象才能调用该方法。
- 对于类静态成员函数(通常称为“静态方法”),您可以使用该类型的对象来调用它以解析范围,或者由于它是静态方法,您可以使用类的名称(以及
::
范围解析运算符)来解析范围。 - 如果您有一个在单独的命名空间中定义的“自由函数”,但该命名空间不包含您尝试调用该函数的范围,则您需要使用
::
作用域解析运算符(例如“namespaceName::functionName()
”),或者使用“using
”关键字将该函数的名称带入当前作用域。
既然你问的是类成员方法,我将在下面的讨论中忽略上面的#3....
您有 class A
的实例吗? ?如果是这样,假设您将其称为“fred”,那么您可以调用 fred.convert(myword);
。但是A::convert()
不使用 class A
的任何成员数据,所以也许您希望它是一个静态成员方法(即即使没有类类型的对象也可以调用它),其中您需要将该方法声明为 static
,当你调用它时,使用“A::convert(myword);
”。
以下是创建 class A
实例的示例以及调用方法A::convert()
关于它:
===== file 'A.h' =====
class A
{
public:
int convert(char bcd);
};
===== file 'program.cpp' =====
#include "A.h"
#include <iostream>
#include<stdio.h>
using namespace std;
int A::convert(char b)
{
return b*5;
}
int main()
{
char myword = '27';
A fred; // create an instance of class A named "fred"
char cc = fred.convert(myword);
cout << "Number is: " << cc << endl;
}
这是一个示例,其中 A::convert()
是静态成员方法,调用该方法不需要类的实例:
===== file 'A.h' =====
class A
{
public:
static int convert(char bcd); // <--- note 'static' keyword
};
===== file 'program.cpp' =====
#include "A.h"
#include <iostream>
#include<stdio.h>
using namespace std;
int A::convert(char b)
{
return b*5;
}
int main()
{
char myword = '27';
A fred; // create an instance of class A named "fred"
char cc = fred.convert(myword); // you can call convert() on an A object
char dd = A::convert(myword); // or you can call it without an A object
cout << "Number cc is: " << cc << endl;
cout << "Number dd is: " << dd << endl;
}
关于c++ - 未在此范围内声明函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55031773/