“预期”的错误是什么;“在obj''之前?

时间:2009-04-21 05:38:46

标签: c++

我正在用C ++编写一个程序,使用我自己的头文件。

的main.cpp

#include<iostream>
#include"operation.h"

using namespace std;
main()
{
  int a;
  cout <<"Enter the value a";
  cin>>a;

  //class name add
  //obj is object of add
  add obj;
  obj.fun(a);
}

operation.h

class add
{

  void  fun(int b)
  {
    int c,d=10;
    c=d+b;
    cout<<"d="<<d;
  }
}

当我在Linux中使用G ++编译时,它显示以下错误:

->expected ";" before obj
->obj not declared in this scope 

我该如何解决这个问题?为什么会这样?

5 个答案:

答案 0 :(得分:8)

您需要在类add的顶部添加public:。类成员的默认设置是将它们设为私有。

此外,您在类定义的末尾缺少分号。 C ++要求类定义以结束大括号后面的分号结束(实际上你可以在那个时候声明一个变量)。

答案 1 :(得分:2)

我没有看到错误的真正原因,但你应该插入包含警卫并且有一个缺失;在课程定义之后:

// operation.h
#ifndef OPERATION_H
#define OPERATION_H
class add {
public:
   void fun( int b ) {
      int c = 0; // always initialize, just in case
      int d = 10;
      c = d+b;
      std::cout << "d=" << d;
   }
};
#endif

编辑: main()返回类型不存在。你应该在那时添加一个'int'。

答案 2 :(得分:1)

如上所述,第一个“错误”在课后括号内缺少分号; 第二是私人访问违规(公开此方法),

我的建议(保持头文件“干净”)将类方法的定义放入*.cpp文件中,并让您的标题仅包含声明(您将避免不必要的iostream标头包含。)

因此*.hpp文件应仅包含:

class add {
public:
   void fun( int b );
};

*.cpp

void add::fun( int b)
{
  //here goes implementation
}

答案 3 :(得分:1)

你是如何初始化课程的?请注意,以下是在C ++中实例化新“添加”对象的正确方法:

add a(params);

等同于以下内容:

add(params) a;

微妙的差异,绝对不同于其他语言的做法。可以想象产生“预期的”;错误。

顺便说一下,我同意上述评论者的观点,即课程应该大写并且不起作用。这是一个允许更高可读性的约定,您将在其他OO语言中重复使用。 OTOH,这假设可读代码为您的目标。是否使用CamelCase或下划线命名是更主观的,因此更有争议,恕我直言。

答案 4 :(得分:0)

对我而言,这似乎不是你遇到的唯一问题:

$ g++ -c /tmp/ttt.cpp
In file included from /tmp/ttt.cpp:2:
/tmp/operation.h: In member function ‘void add::fun(int)’:
/tmp/operation.h:8: error: ‘cout’ was not declared in this scope
/tmp/ttt.cpp: At global scope:
/tmp/ttt.cpp:4: error: expected unqualified-id before ‘using’
/tmp/ttt.cpp: In function ‘int main()’:
/tmp/ttt.cpp:8: error: ‘cout’ was not declared in this scope
/tmp/ttt.cpp:9: error: ‘cin’ was not declared in this scope
/tmp/operation.h:4: error: ‘void add::fun(int)’ is private
/tmp/ttt.cpp:14: error: within this context

确保首先解决头文件中的所有错误。