c ++错误c2373重新定义不同的类型修饰符

时间:2014-01-31 23:41:57

标签: c++ file compiler-errors

当我运行程序时,我收到此错误。

  

c ++错误c2373'readBalance'重新定义不同的类型修饰符

我想阅读文件中的内容然后写。

// ReadAndWrite.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <fstream>

using namespace std;

double readBalance;
double balance;

int main ()
{
    double readBalance();
    double balance = 0;
    ifstream readfile;
    readfile.open("renatofile.txt");
    char output [100];

    if (readfile.is_open())
    {
         while(!readfile.eof())
         {
             readfile>>output;
         }
    }
    readfile.close();
    balance=atof(output);
    return balance;
}   

可能因为我正在恢复平衡吗?

3 个答案:

答案 0 :(得分:3)

我猜你想要做的是将readBalance定义为一个函数,然后从main调用它,如下所示:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <cstdlib>       // you need this for atof

using namespace std;

double readBalance();    // this is a function prototype
double balance;          // this is a global variable - you don't need this at all

int main ()
{
    cout << readBalance() << endl;    // this will print the balance 
    return 0;
}

double readBalance()
{
    double balance = 0;               // this local variable hides the global...
    ifstream readfile;
    readfile.open("renatofile.txt");
    char output [100];

    if (readfile.is_open()) {
        while(!readfile.eof()) {
            readfile>>output;
        }
    }
    readfile.close();
    balance=atof(output);
    return balance;
}

请注意,您已在全局和本地声明balance,这可能不是您想要的。

顺便说一下,你也错过了atof函数(cstdlib)所需的包含。

答案 1 :(得分:1)

这是因为

    double readBalance();

我不知道你为什么把它放在那里。

答案 2 :(得分:0)

放置在本地范围内的函数声明仍然使用外部链接声明名称,而不是本地名称。这意味着您的本地double readBalance();声明将readBalance声明为全局函数的名称。与此同时,您上面几行将readBalance声明为全局变量

由于两个实体都是全球(即具有外部链接),因此它们相互冲突。此冲突是触发错误消息的原因。

您可能会注意到balance也在本地范围内“重新声明”。使用balance时,不会发生冲突,因为在本地范围balance中声明为变量。放置在本地范围内的变量声明会生成没有链接的本地名称。因此,局部变量balance完全独立于上面声明的全局变量balance。这是完全合法的。

所以,问题是为什么你试图同时将readBalance声明为变量和函数?什么是readBalance应该是什么(因为你从来没有在你的代码中使用它)?