gpt4 book ai didi

包含 header 时的 C++ LNK2019

转载 作者:行者123 更新时间:2023-11-28 06:56:59 26 4
gpt4 key购买 nike

我有一个头文件,其中声明了每个函数的声明:

#ifndef TYPECONVERTER_H_INCLUDED
#define TYPECONVERTER_H_INCLUDED

#include <iostream>
#include <string>
#include <vector>
#include <Windows.h>

using namespace std;

unsigned int letter2number(char input);
char number2letter(unsigned int input);

string chararr2string(char *input);
string char2string(char input);

char string2char(string input);
char *string2chararr(string input);

string int2string(int input);
int string2int(string input);
wstring string2wstring(const std::string& input);

LPSTR string2lpstr(string input);

vector<int> intarr2intvector(int input[]);

int *vectorint2intarr(vector<int> input);

vector<string> strarr2vectorstr(string *input);
string *vectorstr2strarr(vector<string> input);

vector<char> chararr2vectorchar(char *input);
char *chararr2vector(vector<char> input);

string wchar2string(WCHAR wc[260]);


#endif

然后是具有实际功能的 .cpp 文件:

#include "stdafx.h"

#include <iostream>
#include <string>
#include <vector>
#include <Windows.h>
#include "TypeConverter.h"

using namespace std;

unsigned int letter2number(char input)
{
if(input >= 'A' && input <= 'Z')
return input - 64;
else if(input >= 'a' && input <= 'z')
return input - 96;
return 0;
}

char number2letter(unsigned int input)
{
if(input >= 1 && input <= 26)
return input + 96;
return 'a';
}

string chararr2string(char *input)
{
string ret(input);
return ret;
}

string char2string(char input)
{
string ret = "";
ret += input;
return ret;
}
char string2char(string input)
{
return input[0];
}

char *string2chararr(string input)
{
char *ret=new char[input.size()+1];
ret[input.size()]=0;

memcpy(ret,input.c_str(),input.size());

return ret;
}
string int2string(int input)
{
return std::to_string(input);
}

int string2int(string input)
{
try{
stoi(input);
return stoi(input);
}
catch(std::invalid_argument){
return 1;
}

}

wstring string2wstring(const std::string& input)
{
std::wstring ret = std::wstring(input.begin(), input.end());
return ret;
}

LPSTR string2lpstr(string input)
{
return const_cast<char *>(input.c_str());
}

vector<int> intarr2intvector(int input[])
{
std::vector<int> ret(input, input + sizeof input / sizeof input[0]);
return ret;
}

int *vectorint2intarr(vector<int> input)
{
int *ret = &input[0];
return ret;
}

vector<string> strarr2vectorstr(string *input)
{
std::vector<string> ret(input, input + sizeof input / sizeof input[0]);
return ret;
}

string *vectorstr2strarr(vector<string> input)
{
string *ret = &input[0];
return ret;
}

vector<char> chararr2vectorchar(char *input)
{
std::vector<char> ret(input, input + sizeof input / sizeof input[0]);
return ret;
}

char *chararr2vector(vector<char> input)
{
char *ret = &input[0];
return ret;
}

string wchar2string(WCHAR wc[260])
{

char ch[260];
char DefChar = ' ';
WideCharToMultiByte(CP_ACP,0,wc,-1, ch,260,&DefChar, NULL);

std::string ss(ch);
return ss;
}

当我使用时:

#include "stdafx.h"
#include <iostream>
#include <string>
#include "TypeConverter.h"

using namespace std;

int main()
{
cout << int2string(2) << endl;
}

如果它在创建这两个文件的项目中,它工作得很好。但是,当我尝试通过包含“TypeConverter.h”在不同的程序中做同样的事情时,它给了我一个 LNK2019“未解析的外部符号”错误。我做错了什么?

最佳答案

头文件只是声明函数。您还需要定义它们。链接器错误告诉您它找不到函数的定义。

要么编译定义函数的源文件,要么向链接器提供定义函数的目标文件或库。

这些选项中的哪一个适合您取决于您​​希望如何构建程序。但是,我的猜测是包含源文件是最好的方法。这有一个明显的好处,即您的程序将始终与源代码同步。

关于包含 header 时的 C++ LNK2019,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23035715/

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