Ошибка при попытке скомпилировать DLL со статической функцией класса в VC ++ - PullRequest
4 голосов
/ 31 августа 2011

Я пытаюсь использовать некоторые функции, которые я создал и протестировал в отдельном приложении. Теперь, когда я пытаюсь создать DLL, я получаю несколько ошибок, утверждающих, что функция была переопределена и возвращаемые параметры не совпадают. Кажется, это единственный раз, когда я получаю эти ошибки, я протестировал его, удалив этот класс, и он прекрасно компилируется, а также автономное приложение с main.cpp, ссылающимся на них напрямую. Ниже приведены ошибки и файлы h и cpp:

Ошибка 7, ошибка C2371: «Parser :: parse»: переопределение; разные основные Типы c: \ users \ seb \ Documents \ visual studio 2005 \ projects \ TestDLL \ TestDLL \ parser.cpp 17

Ошибка 4 ошибка C2526: «Parser :: parse»: функция связи C не может вернуть класс C ++ 'std :: vector <_Ty>' c: \ users \ seb \ documents \ visual studio 2005 \ projects \ TestDLL \ TestDLL \ parser.h 28

Ошибка 6, ошибка C2556: 'IDVec Parser :: parse (const char *)': перегружен Функция отличается только типом возвращаемого значения от 'void Parser :: parse (const char *) 'c: \ users \ seb \ Documents \ visual studio 2005 \ projects \ TestDLL \ TestDLL \ parser.cpp 17

Также найдите файл .h и функцию из .cpp:

parser.h

#ifndef PARSER_H
#define PARSER_H

#if defined DLL_EXPORT
#define TESTAPI __declspec(dllexport)
#else
#define TESTAPI __declspec(dllimport)
#endif

#include <iostream>
#include <vector>

typedef struct _ListEntry {
    std::string id, path;
} ListEntry;

typedef std::vector<ListEntry> IDVec;

extern "C"
{
    class TESTAPI Parser
    {
    public:
        Parser(void);
        ~Parser(void);
        static IDVec parse(const char* Buffer);
    private:
        static size_t nextLine(std::string& rstrText, size_t pos);
        static std::string nextWord(std::string& rstrText, size_t pos);
        static void fixOSSpecificPath(std::string& rstrPath);
    };
}

#endif

Parser.cpp

IDVec Parser::parse(const char* Buffer) 
{

    std::string s = Buffer;
    IDVec v;

    // Doing stuff here

    return v;
}

Спасибо за любой совет

1 Ответ

3 голосов
/ 31 августа 2011

Удалить extern "C" вокруг вашего определения класса.

...