atof 函数在程序中不起作用

atof Function not working in program

本文关键字:不起作用 程序 函数 atof      更新时间:2023-10-16

在我的 c++ 程序中,我需要创建一个名为 ComplexNumber 的类来保存复数的信息。我已经将所有函数都写在头文件中,并将函数移到了.cpp文件中。

我当前程序的 atof 函数不起作用。它显示一个错误,指出 atof 不在标准中。当我删除代码的 std:: 部分时,错误显示 atof 未在作用域中声明。

下面是两个示例错误消息:

复数.cpp:63:33:错误:未在此范围内声明"atof" o.realPart = atof(temp.c_str); ^ ComplexNumber.cpp:66:23:error: 'atof' 不是 'std' 的成员 o.imaginaryPart = std::atof(temp.c_str);

错误来自我的 ComplexNumber.cpp 文件,老实说,我对 c++ 的了解不足以确定如何解决此类问题。任何帮助将不胜感激。


主.cpp

/* 
 * File:   main.cpp
 * Author: Tyler Weaver
 *
 * Created on February 2, 2015, 4:08 PM
 */
#include <cstdlib>
using namespace std;
/*
 * 
 */
int main(int argc, char** argv) 
{
    return 0;
}




复数.h

/* 
 * File:   ComplexNumber.h
 * Author: Tyler Weaver
 *
 * Created on February 2, 2015, 4:10 PM
 */
#ifndef COMPLEXNUMBER_H
#define COMPLEXNUMBER_H
#include <cmath>
#include <ostream>
#include <istream>
#include <string>
class ComplexNumber {
public:
    ComplexNumber(float real = 0, float imaginary = 0);
    ComplexNumber operator+(ComplexNumber o);
    ComplexNumber operator-(ComplexNumber o);
    ComplexNumber operator*(ComplexNumber o);
    ComplexNumber operator/(ComplexNumber o);
    bool operator==(ComplexNumber o);
    friend std::ostream& operator<<(std::ostream& out, ComplexNumber o);
    friend std::istream& operator>>(std::istream& in, ComplexNumber o);
    double getMagnitude();
private:
    float realPart;
    float imaginaryPart;
};
#endif  /* COMPLEXNUMBER_H */




复数.cpp

/* 
 * File:   ComplexNumber.cpp
 * Author: Tyler Weaver
 * 
 * Created on February 2, 2015, 4:10 PM
 */
#include "ComplexNumber.h"
ComplexNumber::ComplexNumber(float real, float imaginary) 
{
    realPart = real;
    imaginaryPart = imaginary;
}
ComplexNumber ComplexNumber::operator+(ComplexNumber o) 
{
    return ComplexNumber(realPart + o.realPart,
            imaginaryPart + o.imaginaryPart);
}
ComplexNumber ComplexNumber::operator-(ComplexNumber o) 
{
    return ComplexNumber(realPart - o.realPart,
            imaginaryPart - o.imaginaryPart);
}
ComplexNumber ComplexNumber::operator*(ComplexNumber o) 
{
    return ComplexNumber(realPart * o.realPart -
            imaginaryPart * o.imaginaryPart,
            realPart * o.imaginaryPart + imaginaryPart * o.realPart);
}
ComplexNumber ComplexNumber::operator/(ComplexNumber o) 
{
    double divisor = o.realPart * o.realPart +
            o.imaginaryPart * o.imaginaryPart;
    return ComplexNumber((realPart * o.realPart +
            imaginaryPart * o.imaginaryPart) / divisor,
            (imaginaryPart * o.realPart - realPart * o.imaginaryPart) /
            divisor);
}
bool ComplexNumber::operator==(ComplexNumber o) 
{
    return ((realPart == o.realPart) &&
            (imaginaryPart = o.imaginaryPart));
}
std::ostream& operator<<(std::ostream& out, ComplexNumber o) 
{
    out << o.realPart << " + " << o.imaginaryPart << "in";
    return out;
}
std::istream& operator>>(std::istream& in, ComplexNumber o) 
{
    std::string temp;
    getline(in, temp, '+');
    o.realPart = std::atof(temp.c_str);
    getline(in, temp, 'i');
    o.imaginaryPart = std::atof(temp.c_str);
    return in;
}
double ComplexNumber::getMagnitude() 
{
    return sqrt(realPart * realPart +
            imaginaryPart * imaginaryPart);
}

你忘了在 ComplexNumber.cpp 中#include <cstdlib>atof 函数在该标头中声明。

在C++中,源文件是彼此独立编译的,并且您要使用的所有函数都应在某处声明。 如果它们是在单独的头文件中声明的,则应在引用要调用的函数之前包含该文件。

您需要包含适当的标头:

#include <cstdlib>

把它放在ComplexNumber.cpp顶部附近