c++ - 未在此范围内声明函数错误

标签 c++ function scope declare

我试图在类中定义一个函数,然后在 .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() ”函数。有几种方法可以做到这一点:

  1. 对于非静态类成员函数(当它是类的一部分时,通常称为“方法”),您首先需要该类类型的对象才能调用该方法。
  2. 对于类静态成员函数(通常称为“静态方法”),您可以使用该类型的对象来调用它以解析范围,或者由于它是静态方法,您可以使用类的名称(以及:: 范围解析运算符)来解析范围。
  3. 如果您有一个在单独的命名空间中定义的“自由函数”,但该命名空间不包含您尝试调用该函数的范围,则您需要使用 ::作用域解析运算符(例如“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/

相关文章:

c++ - 为什么允许拥有一个自身具有不完整类型静态成员的类?

javascript - 测试 null 不起作用

c - 将指针数组结构传递给函数

recursion - Lua在递归函数中声明局部变量

function - Fortran 是否通过函数和子例程调用保留内部变量的值?

c++ - 为什么 RegOpenKeyEx 让我打开注册表编辑器中不存在的 key ?

c++ - 无法执行/Applications/Xcode.app/Contents/Developer/usr/bin/clang : No such file or directory

c++ - 向 std::unordered_map 插入数据时发生访问冲突

javascript - 我如何在类组件中使用 bool 状态的可重用函数

javascript:将函数分配给变量会用未定义填充变量