Я пишу программу дерева алгебры. Во время компиляции у меня появилось много ошибок. Я не знаю, откуда берутся ошибки.
Вот мой код:
//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
При компиляции я получил следующие ошибки:
1>c:\users\administrator\desktop\algebra\algebra\unaryop.h(3): warning C4067: unexpected tokens following preprocessor directive - expected a newline
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2236: unexpected 'class' 'Cos'. Did you forget a ';'?
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2143: syntax error : missing ';' before ':'
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2059: syntax error : ':'
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2059: syntax error : 'public'
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2143: syntax error : missing ';' before '{'
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2447: '{' : missing function header (old-style formal list?)
1>c:\users\administrator\desktop\algebra\algebra\algebra.cpp(29): error C2061: syntax error : identifier 'Cos'
Может кто-нибудь подскажет мне, где я ошибаюсь?
Начните с замены
#include "Term.h";
от
#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
Если вы используете "{}" после объявления метода в файле ".H", не могли бы вы объяснить, что это значит? Как это понимает компилятор?
Когда вы используете двоеточие? Это после объявления метода или после определения или для обоих?
Скомпилированы ли файлы.h? Зачем? почему нет?
Если бы вы могли ответить на них, у вас есть свой ответ. Это скорее домашнее задание. Попросите вас разместить только релевантные и только те вопросы, для которых вам нужна техническая помощь.
вам не хватает замыкающей скобки виртуальной функции symbolicEval().
using namespace std;
в шапке. Никогда, никогда, никогда, никогда.