【发布时间】:2019-09-15 03:35:26
【问题描述】:
我有两个 .cpp 文件“rational.cpp”和“main.cpp”以及一个“rational.h”文件。在“rational.cpp”中,我声明了一个 Rational 类,并在两个文件的顶部包含了“rational.h”;但是,当我尝试创建对象 Rational rat; 时。我收到错误“标识符“Rational”未定义”。我很迷茫。
这里是“main.cpp”
#include "rational.h"
int main() {
int select = 1, n, d;
while (select != 0) {
cout << "Enter numerator";
cin >> n;
cout << "\nEnter denominator";
cin >> d;
try {
if (d == 0) {
throw 0;
}
}
catch (int e) {
cout << "/nerror: cannot divide by 0" << endl;
cout << "enter a new denominator: ";
cin >> d;
}
Rational rat;
cout << "1. Add a rational\n2. Subtract a rational\n3. Multiply by a rational\n4. Divide by a rational\n0. Exit";
cout << "enter selector" << endl;
cin >> select;
switch (select) {
case 1: rat.add(n, d); break;
case 2: rat.sub(n, d); break;
case 3: rat.mul(n, d); break;
case 4: rat.div(n, d); break;
case 0: break;
default:
try {
throw select;
}
catch (int e) {
cout << e << " is not a valid option" << endl;
}
catch (...) {
cout << "error: invalid option" << endl;
}
break;
}
}
return 0;
}
"rational.cpp"
#include "rational.h"
class Rational{
public:
void reduce(int n, int d);
//define math functions
void add(int n, int d);
void sub(int n, int d);
void div(int n, int d);
void mul(int n, int d);
};
void Rational::reduce(int n, int d) {
}
void Rational::add(int n, int d) {
}
void Rational::sub(int n, int d) {
}
void Rational::div(int n, int d) {
}
void Rational::mul(int n, int d) {
}
"rational.h"
#pragma once
#ifndef RATIONAL
#define RATIONAL
#include <iostream>
#include <math.h>
#include <exception>
using namespace std;
#endif
还有我的 Makefile
rational.exe: main.o rational.o
g++ -o rational.exe main.o rational.o
main.o: main.cpp rational.h
g++ -c main.cpp
rational.o: rational.cpp rational.h
g++ -c rational.cpp
我是用cygwin编译的。
【问题讨论】:
-
从您的
rational.cpp文件中删除class Rational声明,并将其放入您的rational.h文件中 -
请尽量避免
using namespace std;,因为这被认为是不好的做法。见Why is “using namespace std;” considered bad practice?
标签: c++ class object makefile compiler-errors