涉及函数和范围的C ++头问题

时间:2014-04-03 16:51:27

标签: c++ compiler-errors scope header-files

我的问题在于以下C ++代码。在'cout'的行上我得到了错误:

  

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

·H

using namespace std;
class a{
     int number();
};

的.cpp

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

int main(){
    cout << "Your number is: " << number() << endl;
    return 0; 
}

number(){
    int x = 1;
    return x;
}

注意:我知道这不是最干净的代码。我只是想让函数正常运行并刷新我的内存以了解如何使用标题。

3 个答案:

答案 0 :(得分:1)

对于最低限度的修复,三次基本更改是必要的。

正确实施number()方法

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

正确调用number()方法

a aObject;
cout << "Your number is: " << aObject.number() << endl;

但是还有许多其他增强功能。


另外,正如@CPlusPlus所指出的,number()方法的可用范围,例如声明它public

class a{
  public:
     int number();
};

答案 1 :(得分:0)

在你的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; 
}

对于您的头文件,将class替换为struct。您收到此错误的原因是编译器无法找到变量number。它实际上是一个类的方法。你用class替换struct的原因是因为默认情况下结构中的所有内容都是公共的。因此,名为header.h的头文件应该如下所示

using namespace std;
struct a
{
     int number();
};

答案 2 :(得分:0)

您的代码存在三个问题。

  1. 函数编号()的定义。

    正如您所声明的那样,它是该类&#34; a&#34;的成员函数。在.cpp中,类名应该用作函数的前缀。我的意思是,

    a::number(){
        int x = 1;
        return x;
    }
    
  2. 由于该函数是类&#34; a&#34;的成员,因此只有两种方法可以访问它,

    1. 如果函数是类中的静态函数,则可以使用::运算符访问它。像:: number()。
    2. 如果函数不是静态函数,在你的情况下也是如此,你应该在类中实例化对象&#34; a&#34;他们使用&#34;。&#34;运营商参考。我的意思是,

      a obj;
      obj.number().
      
  3. 您的函数number()在私有范围内声明。您可能还记得,默认情况下,范围是一个私有类,除非您指定public或protected。所以私有函数number()不能在声明的类之外使用,除非有朋友。

    在我修复的代码下面,

    ·H

    using namespace std;
    class a{
    public:
        int number();
    };
    

    的.cpp

    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; 
    }