错误:'length'未在此范围内声明c ++

时间:2014-02-11 22:33:04

标签: c++ inheritance scope

我是初学c ++程序员,这是我的第一个程序(对于那些非常热衷于否定的人)。我在c中编写了相同的代码,但现在尝试用c ++编写。 我收到以下错误。

error: ‘length’ was not declared in this scope

我的代码如下。

#include <iostream>
#include <fstream>
#include <assert.h>
using namespace std;


 class Huffman
 {
    public:

    int data_size, length; //THis length variable is not accessible in main function below in main function.
     Huffman(char *filename);
   ~Huffman();

    struct Huffman1
    {
    int value;
    unsigned char sym;                 /* symbol */
    struct Huffman1 *left,*right;    /* left and right subtrees */
    };   typedef struct Huffman1 Node;

 };

 Huffman::Huffman(char * file_name)
 {

 //I will do something here soon

 }
  Huffman::~Huffman()
 {

 }


 int main(int argc, char * * argv)
 {
      length=10; //Not accessible here.
     if (argc < 2)
    {
        cout<<"Ohh.. Sorry , you forgot to provide the Input File please" <<endl;
        return(0);
    }
     Huffman Object1(argv[1]);

     return(0);


}

我不确定这是c ++编程错误,因为它可能是因为我正在编译它g++ Filename.c -o filename。有人可以纠正,如果这是一个编程错误或由于我编译的方式? 感谢。

6 个答案:

答案 0 :(得分:4)

length是该类的成员,因此它不存在于类外。

您可以在创建类lenth的对象后访问Huffman,如下所示

Huffman Object(argv[1]);
Object.length = 10;

答案 1 :(得分:2)

长度属于霍夫曼类。所以你应该在定义之后将它用于Object1:

Huffman Object1(argv[1]);

Object1.length = 10;

答案 2 :(得分:2)

你知道,public:并不意味着任何放在类树中的分支内的东西都可以在任何地方访问它只是意味着你通过“点符号”访问类的实例变量就像这样Object.length

但是,如果你真的想让长度随处可见,你应该将它声明为全局变量:

short int length;
class Huffman{
...
};
...

答案 3 :(得分:1)

length是你班级的一部分,而不是主要的,因此编译是正确的。 成员属于一个对象,可以通过以下方式访问:

Huffman huffmannObj(...);
std::cout << huffmannObj.length << std::endl;

答案 4 :(得分:1)

length是您班级中可公开访问的成员,但在您对该成员执行任何操作之前,您首先需要该类的实例

Huffman h(whatever_constructor_params);
h.length = 10;

......没问题

答案 5 :(得分:1)

这是一个编译错误,您的代码负责。您在length课程中定义了Huffman。它是该类的成员,而不是全局变量。

想象一下你的班级作为C结构。您需要先创建一个结构才能访问该变量。同样的事情也适用于C ++类。

在创建班级实例后尝试Object1.length = 10;

修改

出于您的目的,使用C ++类,就像使用C结构一样。这样就可以了。

我实际上将Node结构声明放在Huffman类之外。我认为这更容易理解。此外,对于这些情况,在结构中使用typedef在C ++中并没有那么有用,只需声明结构就可以使用结构的名称。

指针不为结构本身分配内存。只有在你分配了内存后,它们才会被使用,即便如此,它们也是Object1的成员,所以你也需要它。

#include <iostream>
#include <fstream>
#include <assert.h>
using namespace std;

struct Node
{
    int value;
    unsigned char sym;                 /* symbol */
};

 class Huffman
 {
    public:

    int data_size, length; //THis length variable is not accessible in main function below in main function.
     Huffman(char *filename);
   ~Huffman();

    Node *left,*right;    /* left and right subtrees */

 };

 Huffman::Huffman(char * file_name)
 {

 //I will do something here soon

 }
  Huffman::~Huffman()
 {

 }


 int main(int argc, char * * argv)
 {
      length=10; //Not accessible here.
     if (argc < 2)
    {
        cout<<"Ohh.. Sorry , you forgot to provide the Input File please" <<endl;
        return(0);
    }
     Huffman Object1(argv[1]);

     Object1.left  = new Node;
     Object1.right = new Node;

     //Do your stuff here...
     Object1.left->sym;

     return(0);


}

这应该让你开始,它绝不是一个完美的实现。它甚至不是面向C ++的,但我已经在答案中超越了自己。这是一个非常不同的问题的主题,欢迎您提出这样的问题,但不要在问题中提出问题。

祝你好运!