Я хочу написать dll для api устройства. так как я новичок в dlls, я хотел реализовать его в простом текстовом редакторе, а затем сделать его для api. Я сделал файл заголовка и файл cpp, но когда я запускаю код, я получаю сообщение об ошибке lnk2001, за которым следует lnk1120, который является нерешенной внешней ошибкой.Ошибка компоновщика DLL C++
Я действительно не знаю, где я сделал ошибку, насколько я вижу, я сделал это правильно. Мне было интересно, могли бы вы, ребята, помочь мне. Тпй.
вот мой файл заголовка
// EditFuncsDll.h
#include <cstdio>
#include <vector>
#include <string>
namespace EditFuncs
{
class MyEditFuncs
{
private:
static std::vector<std::string> MyTextBox;
public:
static __declspec(dllexport) void Load(std::string command);
static __declspec(dllexport) void Save(std::string command);
static __declspec(dllexport) int Lines();
static __declspec(dllexport) void Add(std::string command);
static __declspec(dllexport) void Remove(std::string command);
static __declspec(dllexport) void Insert(std::string command);
static __declspec(dllexport) int wc(std::string command);
static __declspec(dllexport) void GetInfo();
};
}
и в моем файле CPP я просто определить функции я объявленным в заголовочном файле.
и эти ошибки я получаю
Ошибки 25 Ошибка LNK2001: неразрешенный внешний символ «частный: статический станд класса :: вектор, класс станд :: Распределитель>, класс станд :: распределитель, класс станд :: allocator>>> EditFuncs :: MyEditFuncs :: MyTextBox "(? MyTextBox @ MyEditFuncs @ EditFuncs @@ 0V? $ vector @ V? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@ V? $ Allocator @ V? $ Basic_string @ DU? $ Char_traits @ D @ std @@ V? $ Allocator @ D @ 2 @@ std @@@ 2 @@ std @@ A) C: \ Users \ Люси \ Desktop \ Erfan \ Text_Editor_DLL \ Text_Editor_DLL \ EditFuncsDll.obj Text_Editor_DLL
и
Ошибка 26 Ошибка LNK1120: 1 неразрешенных внешних C: \ Users \ Люси \ Desktop \ Erfan \ Text_Editor_DLL \ Debug \ Text_Editor_DLL.dll Text_Editor_DLL
@Assem, но я просто определение функции в файле CPP это Файл cpp заголовка не является основным cpp. Я не думаю, что я должен его определить. нужно ли мне? – Erfan
, вы должны определить каждую статическую переменную-член, объявленную в соответствующем cpp. Просто напишите его перед определением ваших функций в файле .cpp. BTW, я должен исправить то, что я написал в предыдущем комментарии: std :: vector EditFuncs :: MyEditFuncs :: MyTextBox; – Assem
@Assem вот часть моего cpp '// EditFuncsDll.cpp #include "EditFuncsDll.ч» #include #include использования патезраса; пространство имен EditFuncs { \t статического станд :: вектор MyTextBox; \t недействительного MyEditFuncs :: Load (командная строка) \t { \t \t строки filename; \t \t // Имя файла начинается с пятого символа команды и заканчивается файл name = command.substr (5, command.size()); \t \t ifstream inFile; \t \t inFile.open (filename); ' поэтому в соответствии с тем, что вы сказали, я добавил определение этой статической переменной, но все же получаю ту же ошибку. я не знаю, почему! –
Erfan