c++ - 类对象在 int main() 中为“未定义”
问题描述
我有两个 .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;
}
“理性.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) {
}
“理性.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
必须在头文件中,否则编译器不会在 main.cpp 中读取它(因为没有更好的词)。
您需要将声明(即以下部分)移动到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);
};
有关详细信息,请参阅此问题。
推荐阅读
- .net - 应用程序被 Microsoft AV 标记为病毒 - 不确定它发现可疑行为或尝试将其删除的方法
- json - 在 Dart 中将现有字符串转换为原始字符串
- java - XSD 到 Java 类 - 解析模式问题
- google-maps - Anylogic GIS 功能
- r - dplyr 中的标准化结果不一致
- android - 如何通过特定 IP 路由 API 请求?
- python-3.x - cx_Freeze:ImportError:没有名为“PyQt5.Qt”的模块
- node.js - 使用 Node.JS 调用 REST API
- android - UndeliverableException on blockingGet 在 RxJava 中超时
- java - Spring 加载了一个 bean,但无法通过 Autowire 或 ApplicationContextAware 获取它