首页 > 解决方案 > 尝试使用类时出现标识符错误

问题描述

我正在尝试创建一个仅在用户输入 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;

}

标签: c++classobjectidentifier

解决方案


你这里有一些问题:

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;

}

推荐阅读