gpt4 book ai didi

c++ - 将 C++ 文件包含到另一个 C++ 文件

转载 作者:太空狗 更新时间:2023-10-29 23:25:55 25 4
gpt4 key购买 nike

我在包含我的文件时遇到了问题。我得到了 3 个 C++ 文件,它们都得到了 int main(void)。

问题是每当我包含其中 1 个时,它都会说:

函数 'int main(void)' 已经有主体了

但如果我将 int main(void) 删除到其他两个 C++ 文件,现在将提示此错误。

'one or more multiply defined symbols found'

"class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl convertInt(int)" (?convertInt@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) already defined in FormatPosDataXml().obj

"class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl convertInt(int)" (?convertInt@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) already defined in FormatPosDataXml().obj

等等

这是我得到的代码:

FormatPosDataXml().cpp

#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <cstring>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>



using namespace std;

#define nextline '\n'

inline bool TextContains(char *text, char ch) {
while ( *text ) {
if ( *text++ == ch )
return true;
}

return false;
}

void Split(char *text, char *delims, vector<string> &words) {
int beg;
for (int i = 0; text[i]; ++i) {

while ( text[i] && TextContains(delims, text[i]) )
++i;

beg = i;

while ( text[i] && !TextContains(delims, text[i]) )
++i;
words.push_back( string(&text[beg], &text[i]) );
}
}

string convertInt(int number)
{
stringstream ss;//create a stringstream
ss << number;//add number to the stream
return ss.str();//return a string with the contents of the stream
}


string dateFormatChecker(const char *date){
string strdate=date;
char getdate[50];
strcpy_s(getdate, strdate.c_str());

vector<string> checkdate;
Split( getdate, "-", checkdate );
int year, month, day;
year=atoi(checkdate[0].c_str());
month=atoi(checkdate[1].c_str());
day=atoi(checkdate[2].c_str());

string checkyear, checkmonth, checkday, checkhour, checkminute, checksecond;

checkyear = convertInt(year);
if(month<10){
checkmonth = "0" + convertInt(month);
}
else{
checkmonth = convertInt(month);
}
if(day<10){
checkday = "0" + convertInt(day);
}
else{
checkday = convertInt(day);
}

/*
cout << checkdate[0] << ' ' << checkyear << '\n'
<< checkdate[1] << ' ' << checkmonth << '\n'
<< checkdate[2] << ' ' << checkday << '\n';
*/
if (checkyear.size() != checkdate[0].size()||
checkmonth.size() != checkdate[1].size()||
checkday.size() != checkdate[2].size()){
return "";
}
return date;
}

string dateandtimeFormatChecker(const char *dateandtime){
string strdate=dateandtime;
char getdateandtime[50];
strcpy_s(getdateandtime, strdate.c_str());

vector<string> checkdateandtime;
Split( getdateandtime, "-: ", checkdateandtime );
int year, month, day, hour, minute, second;
year=atoi(checkdateandtime[0].c_str());
month=atoi(checkdateandtime[1].c_str());
day=atoi(checkdateandtime[2].c_str());
hour=atoi(checkdateandtime[3].c_str());
minute=atoi(checkdateandtime[4].c_str());
second=atoi(checkdateandtime[5].c_str());

string checkyear, checkmonth, checkday, checkhour, checkminute, checksecond;

checkyear = convertInt(year);
if(month<10){
checkmonth = "0" + convertInt(month);
}
else{
checkmonth = convertInt(month);
}
if(day<10){
checkday = "0" + convertInt(day);
}
else{
checkday = convertInt(day);
}
if(hour<10){
checkhour = "0" + convertInt(hour);
}
else{
checkhour = convertInt(hour);
}
if(minute<10){
checkminute = "0" + convertInt(minute);
}
else{
checkminute = convertInt(minute);
}
if(second<10){
checksecond = "0" + convertInt(second);
}
else{
checksecond = convertInt(second);
}


if (checkyear.size() != checkdateandtime[0].size()||
checkmonth.size() != checkdateandtime[1].size()||
checkday.size() != checkdateandtime[2].size()||
checkhour.size() != checkdateandtime[3].size()||
checkminute.size() != checkdateandtime[4].size()||
checksecond.size() != checkdateandtime[5].size()){
return "";
}

//cout << year<< '/' << month << '/' << day << ' ' << hour << ':' << minute << ':' << second << '\n';

return dateandtime;
}

string transaction (const char * SequenceNumber, const char * RetailStoreID, const char * WorkStationID, const char * BusinessDayDate, const char * BeginDateTime, const char * StartTransTime, const char * EndTransTime, const char * EndDateTime, const char * RawData){

string output;

string bdd, bdt, stt, ett, edt;

bdd = dateFormatChecker(BusinessDayDate);
bdt = dateandtimeFormatChecker(BeginDateTime);
stt = dateandtimeFormatChecker(StartTransTime);
ett = dateandtimeFormatChecker(EndTransTime);
edt = dateandtimeFormatChecker(EndDateTime);


cout << "<Transaction>" << "\n\t<RetailStoreID>"
<< RetailStoreID << "</RetailStoreID>\n\t<WorkStationID>"
<< WorkStationID << "</WorkStationID>\n\t<SequenceNumber>"
<< SequenceNumber << "</SequenceNumber>\n\t<BusinessDayDate>"
<< bdd << "</BusinessDayDate>\n\t<BeginDateTime>"
<< bdt << "</BeginDateTime>\n\t<StartTransTime>"
<< stt << "</StartTransTime>\n\t<EndTransTime>"
<< ett << "</EndTransTime>\n\t<EndDateTime>"
<< edt << "</EndDateTime>\n\t<RawData>"
<< RawData << "</RawData>\n</Transaction>";

output = _getch();
return output;
}

int main(void) {
vector<string> words;
char * data = "1,1,SAMPLE,2010-01-31,2011-01-31 14:09:10,2011-01-31 14:42:10,2011-01-31 14:42:10,2011-01-31 14:42:10,JELLY-O RUBBERB\n\r 13.25V.¶üÁËO";

Split( data, ",", words );

char SN[11], RSI[200], WSI[200], BDD[100], BDT[100], STT[100], ETT[100], EDT[100], RD[100];

strcpy_s(SN, words[0].c_str());
strcpy_s(RSI, words[1].c_str());
strcpy_s(WSI, words[2].c_str());
strcpy_s(BDD, words[3].c_str());
strcpy_s(BDT, words[4].c_str());
strcpy_s(STT, words[5].c_str());
strcpy_s(ETT, words[6].c_str());
strcpy_s(EDT, words[7].c_str());
strcpy_s(RD, words[8].c_str());

string PosData;
PosData = transaction(SN,RSI,WSI,BDD,BDT,STT,ETT,EDT,RD);


/* Checker
for (int i = 0; i != words.size(); i++){
cout << words[i] << nextline;
}
cout << SN << nextline << RSI << nextline << WSI << nextline << BDD << nextline << BDT << nextline << STT << nextline << ETT << nextline << EDT << nextline << RD;
*/
return 0;
}

FSNPC.cpp

#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <cstring>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include "FormatPosDataXml().cpp"

using namespace std;


string getstring(string holder){
if (holder == "" || holder.size()>100){
exit(1);
}

int i=0,ch=0;
int size;
char charInput[100];

strcpy_s(charInput, holder.c_str());
size = strlen(charInput);

#define DATA_LENGTH 100
#define BUFFER_LENGTH (DATA_LENGTH)

char Buffer[BUFFER_LENGTH];

while (i < DATA_LENGTH) {
Buffer[i++] = charInput[i];
Buffer[i] = '\0';
if(size == i){
break;
}
}
holder = Buffer;

strcpy_s(charInput, holder.c_str());
size = strlen(charInput);

i = 0;
for(int j = 0;j<size;j++)
{
if (charInput[j] < 2)
{
if (charInput[j+i] > 2 && charInput[j+i] != 17){
charInput[j] = charInput[j+i];
charInput[j+i]='\0';
i=0;
}
else{
i++;
j--;
}
}else if (charInput[j] == 17)
{
if (charInput[j+i] > 2 && charInput[j+i] != 17){
charInput[j] = charInput[j+i];
charInput[j+i]='\0';
i=0;
}
else{
i++;
j--;
}
}
}
size = strlen(charInput);
for(int remove = 0; remove<size ;remove++)
{
if (charInput[remove] < 2 || charInput[remove] == 17)
{
charInput[remove]='\0';
}
}

string handler;
handler = charInput;

handler = handler.substr(0, handler.length() - 1);
return (handler);
}



/*
int main(void){

string final;


string input = "JELLY-O RUBBERB\n\r 13.25V.¶üÁË0";
string input2 = "STIÁËCK-O CHOCO\n\r 10.52C.ÁË0¶ü";
string input3 = "STICÁËK-O VANILLA\n\r 10.52C.ÁË0¶ü";


final = getstring(input)+ "\n" +getstring(input2)+ "\n"
+getstring(input3);
cout<<final;
_getch();


return 0;

}*/

按键.cpp

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string>
#include "FormatPosDataXml().cpp"

using namespace std;

int c;
char temp[256];

char getkeypress(char c){

if (c==0x1b){
exit(1);
}

else if (c==0||c==224)
{
c = _getch();

if (c==0x3b){
cout << "You typed: F1\n";
}
else if(c==0x3c){

cout << "You typed: F2\n";
}
else if(c==0x3d){
cout << "You typed: F3\n";
}
else if(c==0x3e){
cout << "You typed: F4\n";
}
else if(c==0x3f){
cout << "You typed: F5\n";
}
else if(c==0x40){
cout << "You typed: F6\n";
}
else if(c==0x41){
cout << "You typed: F7\n";
}
else if(c==0x42){
cout << "You typed: F8\n";
}
else if(c==0x43){
cout << "You typed: F9\n";
}
else if(c==0x44){
cout << "You typed: F10\n";
}
else if(c==133){
cout << "You typed: F11\n";
}
else if(c==134){
cout << "You typed: F12\n";
}
}

else
{
while((cin.getline(temp, sizeof(temp), '\n'))&&(temp!="")){
cout << "You typed:" << temp << '\n';
break;
}
}

}
/*
int main(void){



while (c^=0x1b){
cout<<"Press any key:\n";
c = getkeypress(_getch());
}
_getch();
return 0;
}
*/

我如何链接所有这些文件。我希望它们成为一个图书馆。那我该怎么做呢?

最佳答案

一般来说,在 .cpp 文件中包含另一个 .cpp 文件是不好的做法。正确的方法是将声明分解为 .h 文件,并将定义放在 .cpp 文件中。确保在每个 .h 文件的顶部放置一个伪定义,以防止意外重新包含,如:

#ifndef MYFILE_H_
#define MYFILE_H_

// your code goes here

#endif

当你编译你的程序时,你需要将所有的.cpp文件编译成.o文件(或者Windows上的.obj) ,然后将它们链接在一起。例如(Linux/Mac):

g++ -c foo.cpp
g++ -c bar.cpp
g++ foo.o bar.o -o theMainExecutable

关于c++ - 将 C++ 文件包含到另一个 C++ 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4940489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com