C++ 有人能看看我的代码吗?错误C2059:语法错误:';公共';

C++ 有人能看看我的代码吗?错误C2059:语法错误:';公共';,c++,C++,我正在写一个代数树程序。在编译时,我犯了很多错误。我不知道这些错误是从哪里来的 这是我的密码: //file: Term.h #ifndef TERM #define TERM #include <sstream> #include <string> using namespace std; class Term { public: Term() {} virtual ~Term() {} virtual string symbolicEval() = 0;

我正在写一个代数树程序。在编译时,我犯了很多错误。我不知道这些错误是从哪里来的

这是我的密码:

//file: Term.h
#ifndef TERM
#define TERM
#include <sstream>
#include <string>
using namespace std;

class Term {
public:
  Term() {}
  virtual ~Term() {}
  virtual string symbolicEval() = 0;
  virtual double numericalEval(double X) = 0;
};  
 #endif

//file: UnaryOp.h
#ifndef UNARYOP
#define UNARYOP
#include "Term.h";

class UnaryOp: public Term{
protected:
   Term* Child;
public:
   UnaryOp(Term* l){Child = l;};
   virtual ~UnaryOp(){delete Child;};
   virtual string symbolicEval(){};
  virtual double numericalEval(){};

};
#endif UNARYOP

//file:CCos.h
#ifndef COS_H
#define COS_H

 #include "UnaryOp.h"

 class  Cos: public UnaryOp{
  public:
    Cos(Term * l):UnaryOp(l){};
    virtual ~ Cos(){};
    virtual string symbolicEval(){
    ostringstream oss;
    oss << "cos(x)" << endl;
    return oss.str();
  };
    virtual double numericalEval(double X){
    return cos(Child->numericalEval(X));
  }

  }
  #endif COS_H

有人能告诉我哪里错了吗?

您缺少虚拟字符串符号val()函数的右括号。

从替换开始

#include "Term.h";

(可能还有更多的事情出错)。事实上,第一条错误消息确切地告诉您,预处理器希望看到一个换行符,您在换行符中写了一个分号,所以下次请先阅读错误消息。

多件事

为什么要在头文件中提供方法的定义

//file:CCos.h
#ifndef COS_H
#define COS_H

 #include "UnaryOp.h"

 class  Cos: public UnaryOp{
  public:
    Cos(Term * l):UnaryOp(l){};
    virtual ~ Cos(){};
    virtual string symbolicEval(){
    ostringstream oss;
    oss << "cos(x)" << endl;
    return oss.str();
  };
    virtual double numericalEval(double X){
    return cos(Child->numericalEval(X));
  }

  }
  #endif COS_H
//文件:CCos.h
#ifndef COS_H
#定义COS_H
#包括“UnaryOp.h”
类别Cos:公共一元操作{
公众:
Cos(Term*l):UnaryOp(l){};
虚拟~Cos(){};
虚拟字符串符号val(){
ostringstream oss;

oss从不在头文件中使用命名空间std;
。从不,永远,永远,永远。“你忘了一个';'?”消息是相关的。在类Cos的末尾没有“;”。@chhowie,你好,谢谢你的回复。为什么不在头文件中使用命名空间std;呢?@JessicaJin因为它不仅将
std
命名空间中每种类型的名称引入头文件的作用域,而且还将包含此头文件的每个文件的作用域中,i包括其他头,层叠。可能任何包含这些头的人都不希望这样。这不会破坏编译,我think@Doc布朗,你好!谢谢你的回复…自从这是我第一次写这么大的项目以来,我几乎感到沮丧了…@AliKazmi:不要和编译器争论,而是阅读信息。我的意思是,在这个cas中缩进是有误导性的,但它确实存在。我说的是类Cos::virtualstringsymboliceval();由提问者决定,不能说任何东西不知道你想说什么。
Cos
类中的大括号是平衡的。有一个放错了的
但那不是你说的。放错了;会导致类的结束,不是吗?@AliKazmi不,放错了;不会导致类的结束。你需要一个结尾。
#include "Term.h"
//file:CCos.h
#ifndef COS_H
#define COS_H

 #include "UnaryOp.h"

 class  Cos: public UnaryOp{
  public:
    Cos(Term * l):UnaryOp(l){};
    virtual ~ Cos(){};
    virtual string symbolicEval(){
    ostringstream oss;
    oss << "cos(x)" << endl;
    return oss.str();
  };
    virtual double numericalEval(double X){
    return cos(Child->numericalEval(X));
  }

  }
  #endif COS_H