好吧,我對這個錯誤有點困惑。我在這裏要做的是做一個basic_string,當UNICODE和_UNICODE被定義時(這是在WINAPI中)將是char或wchar_t。這確實有效,但出於某種原因,我無法定義一個函數,它在聲明它的類之外接收std :: basic_string。這裏有一個例子:basic_string <TCHAR>不允許在聲明的地方之外定義
test.h
#ifndef TEST_H
#define TEST_H
#include <Windows.h>
#include <string>
class Test
{
public:
void func(std::basic_string<TCHAR> stringInput);
};
#endif
TEST.CPP
#include "test.h"
void Test::func(std::basic_string<TCHAR> stringInput)
{
MessageBox(NULL, stringInput.c_str(), TEXT("It works!"), MB_OK);
}
這將產生一個鏈接錯誤,聲稱測試::從未定義FUNC。但是,如果我只是這樣定義類中:
test.h
#ifndef TEST_H
#define TEST_H
#include <Windows.h>
#include <string>
class Test
{
public:
void func(std::basic_string<TCHAR> stringInput)
{
MessageBox(NULL, stringInput.c_str(), TEXT("It works!"), MB_OK);
}
}
#endif
它工作正常。但是,我真的很想將我的聲明和定義保存在單獨的文件中,以避免重新定義錯誤和組織。儘管這是踢球。當我有像以前一樣在test.cpp中定義的func,並且不在我的main.cpp中定義UNICODE和_UNICODE時,我不會收到鏈接錯誤。所以真的,唯一一次我得到一個鏈接錯誤是當TCHAR變成wchar_t。因此,這裏是我的主,誤差真正的快...
的main.cpp
#define UNICODE // this won't compile when these are defined
#define _UNICODE
#include <Windows.h>
#include <string>
#include "test.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
Test test;
test.func(TEXT("wakka wakka"));
return 0;
}
錯誤:
error LNK2019: unresolved external symbol "public: void __thiscall Test::func(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >)" ([email protected]@@[email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@@Z) referenced in function [email protected]
任何人都有一個線索是怎麼回事,如何我可能會去修復這個?
你實際上是否* *所有*你的目標文件鏈接在一起? – 2012-04-07 23:57:29