我真的,真的很累,似乎我无法处理这个问题。我已经在大约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;
答案 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的答案是更好的解决方法。