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