c++ - 尝试使用类时出现标识符错误
问题描述
我正在尝试创建一个仅在用户输入 EOF 时才会中断的交互式循环。
当我运行程序并运行 main() 中的代码时,它会吐出错误
错误 C3861:“startClass”:找不到标识符
我已经在公共类中声明 startClass 以及在它自己的函数中的 main 之外,所以不确定找不到哪个标识符。谢谢。
#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>
using namespace std;
class ExchangeList {
private:
double exchRate;
public:
ExchangeList() {
exchRate = 0;
}
void AddExchange(double x) {
if (x > 0) {
exchRate = x;
}
}
double getExchange() {
return exchRate;
}
void startClass(double, double, double, string, string);
};
int main() {
double value{ 0 };
double exchange{ 0 };
double transaction{ 0 };
string toCurr;
string fromCurr;
//ExchangeList N;
while (!cin.eof()) {
cout << "Input exchange rate: ";
cin >> exchange;
startClass(value, exchange, transaction, toCurr, fromCurr);
}
return EXIT_SUCCESS;
}
void startClass(double value, double exchange, double transaction, string toCurr, string fromCurr) {
ExchangeList N;
N.AddExchange(exchange);
cout << N.getExchange();
return;
}
解决方案
你这里有一些问题:
cin::eof()
使用这个函数是错误的,最好找点别的东西来结束while循环。类似于将指示循环结束的特定输入,请尝试以下操作:
cout << "Input exchange rate: ";
cin >> exchange;
while (exchange != -9999) {
startClass(value, exchange, transaction, toCurr, fromCurr);
cout << "Input exchange rate: ";
cin >> exchange;
}
函数声明,在 main 之上
您创建了一个没有 class 的函数startClass
,没有在函数上方声明main
,是什么原因导致该main
函数无法使用该函数。
void startClass(double value, double exchange, double transaction, string toCurr, string fromCurr);
int main() {
...
//use the function...
...
}
void startClass(double value, double exchange, double transaction, string toCurr, string fromCurr) {
...
}
或者,在 main 上方没有声明定义:
void startClass(double value, double exchange, double transaction, string toCurr, string fromCurr) {
...
}
int main() {
...
//use the function...
...
}
使函数属于类
您试图声明一个类的 function startClass
,但在定义中您没有指定类名,如下所示:
void ExchangeList::startClass(double value, double exchange, double transaction, string toCurr, string fromCurr) {
AddExchange(exchange);
cout << getExchange();
return;
}
如果是类的功能
当你调用类的函数时,你没有指定函数的类:
class ExchangeList {
...
public:
void startClass(double, double, double, string, string);
};
void ExchangeList::startClass(double value, double exchange, double transaction, string toCurr, string fromCurr) {
AddExchange(exchange);
cout << getExchange();
return;
}
int main() {
...
ExchangeList N;
while (exchange != -9999) {
...
N.startClass(value, exchange, transaction, toCurr, fromCurr);
}
return EXIT_SUCCESS;
}
类中的静态函数
class ExchangeList {
...
public:
static void startClass(double, double, double, string, string);
};
int main() {
...
while (exchange != -9999) {
...
ExchangeList::startClass(value, exchange, transaction, toCurr, fromCurr);
}
return EXIT_SUCCESS;
}
void ExchangeList::startClass(double value, double exchange, double transaction, string toCurr, string fromCurr) {
ExchangeList N;
N.AddExchange(exchange);
cout << N.getExchange();
return;
}
推荐阅读
- spring - grpc 使用有状态数据重新连接到其他服务器的最佳方式是什么?
- python - 带有数组 dtypes 的 pandas to_sql postgresql
- winapi - 如何在 CMFCToolBarFontComboBox 上调用 SetExtendedUI
- python - 使用服务主体的流式事件中心
- data-structures - 如何匹配字符串集合中最特定的字符串
- tcp - Apache Camel TCP 客户端与服务器通信
- node.js - 向 Next.JS 项目添加可执行命令
- git - Git 不断提交未跟踪的文件
- c# - 如何将 UserControl 值转换为 NameValueCollectionw?
- android - 在片段内使用导航主机片段和底部导航视图?