C++;涉及函数和范围的标题问题 我的问题是在下面的C++代码中。在带有“cout”的行中,我得到了错误:

C++;涉及函数和范围的标题问题 我的问题是在下面的C++代码中。在带有“cout”的行中,我得到了错误:,c++,compiler-errors,scope,header-files,C++,Compiler Errors,Scope,Header Files,“'number'未在此范围内声明” h .cpp 使用名称空间std; #包括 #包括“header.h” int main(){ 无法在您的cpp文件中尝试此操作 using namespace std; #include <iostream> #include "header.h" void a::number() { int x = 1; return x; } int main() { cout << "Your number is: "

“'number'未在此范围内声明”

h

.cpp

使用名称空间std;
#包括
#包括“header.h”
int main(){

无法在您的cpp文件中尝试此操作

using namespace std;
#include <iostream>
#include "header.h"

void a::number()
{
    int x = 1;
    return x;
}


int main()
{

cout << "Your number is: " << a().number() << endl;
return 0; 
}

对于最小修复,需要进行三次基本更改

正确实现
number()
方法

int a::number() {
    int x = 1;
    return x;
}
a aObject;
cout << "Your number is: " << aObject.number() << endl;
正确调用
number()
方法

int a::number() {
    int x = 1;
    return x;
}
a aObject;
cout << "Your number is: " << aObject.number() << endl;

您的代码有三个问题

  • 函数number()的定义

    正如您所声明的,它是类“a”的成员函数。在.cpp中,类名应该用作函数的前缀。我的意思是

    a::number(){
        int x = 1;
        return x;
    }
    
  • 由于函数是类“a”的成员,因此只有两种访问方法

  • 如果该函数是类中的静态函数,则可以使用::operator.Like::number()访问它
  • 如果函数不是静态函数,在你的例子中是这样的,你应该实例化类“a”之外的对象,他们使用“.”操作符和引用。我的意思是

    a obj;
    obj.number().
    
  • 您的函数
    number()
    是在私有作用域中声明的。您可能记得,默认情况下,除非您指定了public或protected,否则该作用域是一个私有的类。因此,私有函数number()不能在声明的类之外使用,除非它有朋友

    在我修复的代码下面

    h

    .cpp

    使用名称空间std;
    #包括
    #包括“header.h”
    a::number(){
    int x=1;
    返回x;
    }
    int main(){
    obj;
    
    您知道默认的
    number
    访问是如何私有的吗?在
    number
    声明为公共之前,上述调用将失败。
    a::number(){
        int x = 1;
        return x;
    }
    
    a obj;
    obj.number().
    
    using namespace std;
    class a{
    public:
        int number();
    };
    
    using namespace std;
    #include <iostream>
    #include "header.h"
    
    a::number(){
        int x = 1;
        return x;
    }
    
    int main(){
        a obj;
        cout << "Your number is: " << obj.number() << endl;
        return 0; 
    }