'cont'的多重定义

时间:2015-11-16 20:36:38

标签: c++

我真的,真的很累,似乎我无法处理这个问题。我已经在大约1个半小时内完成了截止日期,我遇到了这个错误。问题是,在此之前,我处理了一些这样的错误。它说多个定义,如果续,似乎什么都不起作用。如果有人能帮助我,我会非常感激。感谢

主。 CPP

    #include "banca.h"

using namespace std;


extern TranzactieBancara cont[100];
extern TranzactieBancara h;

int main()
{



    char nume[10],prenume[10];

    int optiune;
    int i;
    marcaj:

    cout<<"Numele: ";
    cin>>nume;
    cout<<"Prenumele: ";
    cin>>prenume;
     i = h.cautare(nume,prenume);// am implementat o functie de cautare pentru a afla ce cont sa caut


    cout<<"Apasati tasta 1 pentru creearea unui cont nou"<<endl;
    cout<<"Apasati tasta 2 pentru inchiderea contului"<<endl;
    cout<<"Apasati tasta 3 pentru depunerea unei sume de bani"<<endl;
    cout<<"Apasati tasta 4 pentru extragerea unei sume de bani"<<endl;
    cout<<"Apasati tasta 5 pentru transferarea unei sume de bani intr-un alt cont"<<endl;
    cout<<"Apasati tasta 6 pentru afisarea conturilor active"<<endl;
    cin>>optiune;

    switch(optiune)
    {
    case 1:
        h.Initializare(); // functia Initializare implementeaza un cont nou
        goto marcaj;


    case 2:
        if(cont[i].Verificare(i)==1) // functia Verificare(i) verifica daca parola data de utilizator este corespunzatoare contului
        {
            cont[i].InchidereCont(); //aceasta functie inchide contul
            goto marcaj;
        }
        break;
    case 3:
        if(cont[i].Verificare(i)==1)
         {
             cont[i].DepunereBani(i); //aceasta functie depune bani in contul utilizatorului
             goto marcaj;
         }
        break;
    case 4:
        if(cont[i].Verificare(i)==1)
        {
            cont[i].RetragereBani(i); // aceasta functie retrage bani din contul utilizatorului
            goto marcaj;
        }
    case 5:
        if(cont[i].Verificare(i)==1)
         {
            cont[i].TransferBani(i); // aceasta functie trasfera bani din contul utilizatorului intr-un alt cont dat de el
            goto marcaj;
         }
    case 6:
        cont[i].AfisareCont(i); // afiseaza detaliile contului corespunzator utilizatorului
        goto marcaj;
    default:
        cout<<"Optiune invalida, incercati din nou:"<<endl;
        goto marcaj;

    }



getch();

return 0;
}

banca.cpp

#include "banca.h"

#define n 10

extern TranzactieBancara cont[100];
extern TranzactieBancara h;


TranzactieBancara::TranzactieBancara()
{
   ifstream fisier1("fisier1.txt");
   if(!fisier1)
        cout<<"Eroare la deschiderea fisierului 1 !"<<endl;


   int i = 1;

   fisier1.seekg(0,ios::beg); // ne pozitionam la inceputul fisierului
   while(!fisier1.eof())
   {
       fisier1>>cont[i].nume;
       i++;
   }

   ifstream fisier2("fisier2.txt");
   if(!fisier2)
        cout<<"Eroare la deschiderea fisierului 2 !"<<endl;


   i=1;
   fisier2.seekg(0,ios::beg);
   while(!fisier2.eof())
    {
        fisier2>>cont[i].prenume;
        i++;
    }

   ifstream fisier3("fisier3.txt");
   if(!fisier3)
        cout<<"Eroare la deschiderea fisierului 3!"<<endl;

   i=1;
   fisier3.seekg(0,ios::beg);
   while(!fisier3.eof())
   {
       fisier3>>cont[i].parola;
       i++;
    }

   ifstream fisier4("fisier4.txt");
   if(!fisier4)
        cout<<"Eroare la deschiderea fisierului 4!"<<endl;

   i=1;
   fisier4.seekg(0,ios::beg);
   while(!fisier4.eof())
   {
       fisier4>>cont[i].sold;
       i++;
   }


}

int TranzactieBancara::cautare(char nume[10],char prenume[10])
{
    ifstream fisier1("fisier1.txt");
    ifstream fisier2("fisier2.txt");
    int i,k = 1;
    for( i = 0;i < n;i++)
    {
        if(strcmp(cont[i].nume,nume)==0)
           k=0;
        if(strcmp(cont[i].prenume,nume)==0)
           k=0;
        if(k==0)
           return i;
    }
}

int TranzactieBancara::Verificare(int i)
{
    char parola[20];
    cout<<"Introduceti parola contului aferent";
    for(int j=1;j<=6;j++)
        cin>>parola[i];

    if(strcmp(parola,cont[i].parola)==0)
        return 1;
    else
        return 0;
}

void TranzactieBancara::Initializare()
{
    ofstream f("sciere.txt");

    char nume[100],parola[20];
    cout<<"Introduceti numele dumneavoastra: ";
    cin>>nume;
    f<<nume;
    strcpy(cont[11].nume,nume);

    cont[11].sold=0;

    cout<<"Stabiliti-va parola: ";
    cin>>parola;
    f<<parola;

    strcpy(cont[11].parola, parola);

}

void TranzactieBancara::InchidereCont()
{
   /* delete nume;
    delete parola;
    delete sold*/
}

void TranzactieBancara::DepunereBani(int i)
{
    float suma;
    cout<<"Suma pe care doriti s-o depuneti: ";
    cin>>suma;

    cont[i].sold=cont[i].sold+suma;

    cout<<"In acest moment in cont aveti : "<<cont[i].sold<<" lei " ;
}

void TranzactieBancara::RetragereBani(int i)
{
    float suma;
    cout<<"Suma pe care doriti s-o retrageti: ";
    cin>>suma;

    if(suma>cont[i].sold)
        cout<<"EROARE. Depasire plafon curent";
    else
    {
        cont[i].sold=cont[i].sold-suma;
        cout<<"In acest moment in cont aveti: "<<cont[i].sold<<"lei";
    }
}

void TranzactieBancara::TransferBani(int i)
{
    float suma;
    char nume[10],prenume[10];
    cout<<"Numele celui caruia vreti sa-i transferati bani: ";
    cin>>nume;

    cout<<"Prenumele celui carui vreti sa-i transferati bani: ";
    cin>>prenume;
    cout<<"Introduceti suma pe care vreti s-o transferati";
    cin>>suma;

    if(suma>cont[i].sold)
        cout<<"Eroare, sold insuficient";
    else
        cont[i].sold = cont[i].sold - suma;

    for(int j=1;j<=n;i++)
        if(strcmp(cont[j].nume,nume)==0 && strcmp(cont[j].prenume,prenume)==0)
            cont[j].sold=cont[j].sold+suma;

}

void TranzactieBancara::AfisareCont(int i)
{
    cout<<"Nume: "<<cont[i].nume<<endl;
    cout<<"Prenume: "<<cont[i].prenume<<endl;
    cout<<"Sold curent"<<cont[i].sold<<endl;

}

邦卡。 ħ

#include<iostream>
#include<string.h>
#include<conio.h>
#include<fstream>

#define n 100

using namespace std;


class TranzactieBancara{

    char parola[20];
    float sold;

public:
    char nume[10],prenume[10];

    TranzactieBancara();
    int Verificare(int i);
    void Initializare();
    void DepunereBani(int i);
    void RetragereBani(int i);
    void TransferBani(int i);
    void InchidereCont();
    void AfisareCont(int i);
    int cautare(char nume[10],char prenume[10]);

} ;
TranzactieBancara cont[100];
TranzactieBancara h;

4 个答案:

答案 0 :(得分:4)

永远不要在头文件中执行此操作:

TranzactieBancara cont[100];

将其放入其中一个.cpp文件中,然后在标题中添加:

extern TranzactieBancara cont[100];

答案 1 :(得分:3)

这很容易。您必须在任何需要的地方声明变量。通常在头文件中。您必须在源文件中定义它真正存在的变量。

你让它落后了。你的&#34; extern&#34;声明行应该在标题中,ONE源文件应该具有实际的数组定义。

答案 2 :(得分:3)

当你有

TranzactieBancara cont[100];
TranzactieBancara h;

在头文件中,#include头文件最终定义这些变量的所有.cpp文件。

将它们更改为声明:

extern TranzactieBancara cont[100];
extern TranzactieBancara h;

并在一个.cpp文件中定义它们。

答案 3 :(得分:1)

您已在头文件中创建了一个数组“cont”,并将头文件包含在两个文件中:一个是 main.cpp ,还有一个是 banca.cpp

您需要使用标头防护。

例如:

 #ifndef BANCA_H
 #define BANCA_H
-- you header file code ---
 #endif

编辑:R Sahu的答案是更好的解决方法。