• Как подключить библиотеку с++(возникает ошибка хедер сломан)?

    @savva09 Автор вопроса
    1>D:\Projects\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1.cpp(5,10): fatal error C1083: Не удается открыть файл включение: BaseTerinal.h: No such file or directory,

    но при этом я проверил что файл есть и открывается
    Написано
  • Как подключить библиотеку с++(возникает ошибка хедер сломан)?

    @savva09 Автор вопроса
    658041527f05a589669100.png

    Как альтернатива, можно указать lib-файл в свойствах проекта, для этого перейдите к пункту:

    Linker → General → Additional Library Directories — указать каталог с lib-файлов.(напр. D:\ace\lib)

    Linker → Input → Additional Dependencies — указать само название lib файла (напр. ace_vc11.lib)

    Так же в C/C++ → General → Additional Include Directories можно указать путь к *.h файлам, чтоб в своих исходниках не прописывать полный путь на диске.

    я все переделал

    C/C++ → General → Additional Include Directories = D:\Projects\TerminalHelper\TerminalHelper\BaseTerminal.h
    D:\Projects\TerminalHelper\TerminalHelper\EventArgs.h
    %(AdditionalIncludeDirectories)

    Linker → General → Additional Library Directories — указать каталог с lib-файлов.(напр. D:\ace\lib) = D:\Projects\TerminalHelper\x64\Release
    %(AdditionalLibraryDirectories)

    Linker → Input → Additional Dependencies — указать само название lib файла (напр. ace_vc11.lib) = TerminalHelper.lib

    658042c93eed9871998406.png
    Написано
  • Как подключить библиотеку с++(возникает ошибка хедер сломан)?

    @savva09 Автор вопроса
    я по моему что то не понимаю...
    В с++ библиотека - lib файл + хедеры для его чтения(?)

    Чтоб ее добавить нужно указать директорию с lib файлом и директорию с хедерами. + в AdditionalIncludeDirectories указать пути для сокращения путя к библиотекке
    Написано
  • Как подключить библиотеку с++(возникает ошибка хедер сломан)?

    @savva09 Автор вопроса
    если директория, то пытается добавить .obj
    Написано
  • Как подключить библиотеку с++(возникает ошибка хедер сломан)?

    @savva09 Автор вопроса
    если указываю lib, то пишет страшную ошибку. если указываю obj то:
    1>BaseTerminal.obj : найден .netmodule MSIL или модуль, откомпилированный с параметром /GL; перезапускается компоновка с параметром /LTCG; добавьте /LTCG в командную строку компоновки для повышения производительности компоновщика
    1>LINK : warning LNK4075: не учитывается "/INCREMENTAL" из-за спецификации "/LTCG"
    1>ConsoleApplication1.obj : error LNK2038: обнаружено несоответствие для "_ITERATOR_DEBUG_LEVEL": значение "2" не соответствует значению "0" в BaseTerminal.obj
    1>ConsoleApplication1.obj : error LNK2038: обнаружено несоответствие для "RuntimeLibrary": значение "MDd_DynamicDebug" не соответствует значению "MD_DynamicRelease" в BaseTerminal.obj
    1>LINK : warning LNK4098: библиотека по умолчанию "MSVCRTD" конфликтует с использованием других библиотек; используйте /NODEFAULTLIB:library
    1>BaseTerminal.obj : error LNK2011: не включен в компоновку предкомпилированный объект; образ нельзя запустить
    1>BaseTerminal.obj : error LNK2001: неразрешенный внешний символ "public: virtual bool __cdecl EventArgs::EqualsTo(class EventArgs const *)" (?EqualsTo@EventArgs@@UEAA_NPEBV1@@Z).
    1>ConsoleApplication1.obj : error LNK2001: неразрешенный внешний символ "public: virtual bool __cdecl EventArgs::EqualsTo(class EventArgs const *)" (?EqualsTo@EventArgs@@UEAA_NPEBV1@@Z).
    1>ConsoleApplication1.obj : error LNK2001: неразрешенный внешний символ __imp__invalid_parameter.
    1>ConsoleApplication1.obj : error LNK2001: неразрешенный внешний символ __imp__CrtDbgReport.
    1>ConsoleApplication1.obj : error LNK2001: неразрешенный внешний символ "public: __cdecl CmdEventArgs::CmdEventArgs(enum ReturnType)" (??0CmdEventArgs@@QEAA@W4ReturnType@@@Z).
    1>D:\Projects\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe : fatal error LNK1120: неразрешенных внешних элементов: 5
    1>Сборка проекта "ConsoleApplication1.vcxproj" завершена с ошибкой.
    Написано
  • Как подключить библиотеку с++(возникает ошибка хедер сломан)?

    @savva09 Автор вопроса
    В доп зависимости точно нужно указывать lib файлы? если указываю директорию, пишет ошибку что он по этому пути ищет obj файлы
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    cmake_minimum_required(VERSION 3.27)
    project(TerminalHelper___other_compiler)
    
    set(CMAKE_CXX_STANDARD 23)
    
    add_library(TerminalHelper___other_compiler STATIC Terminal.cpp
            Types/EventArgs.cpp)
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    maaGames, я использую clion, он сам по себе использует mingw, но я поменял на vs компилятор: вот ошибки

    Terminal.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: virtual __cdecl EventArgs::~EventArgs(void)" (??1EventArgs@@UEAA@XZ) в функции main.
    Terminal.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: static class EventArgs const EventArgs::Empty" (?Empty@EventArgs@@2V1@B) в функции "class EventArgs __cdecl Hello(class CmdEventArgs)" (?Hello@@YA?AVEventArgs@@VCmdEventArgs@@@Z).
    Terminal.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: static class CmdEventArgs const CmdEventArgs::Empty" (?Empty@CmdEventArgs@@2V1@B) в функции main.
    Terminal.exe : fatal error LNK1120: неразрешенных внешних элементов: 3
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    #, если вы имеете ввиду то, что мы обсуждаем другие ошибки под ответом, то еще не обсудили чтобы что-то выкладывать
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    #, в текущем ответе на вопрос все подробно расписано. На этот вопрос есть решение. Хотя по моему мы друг друга не понимаем
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    maaGames, мне, как новичку, не принципиально каким компилятором пользоваться. Давайте синхронизируемся. Может так понятней станет
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    Wataru, maaGames помог мне с неопределенным типом. Сейчас обсуждаем другие ошибки под ответом

    Это пофикшеный код
    //
    // Created by SavvaNasyrov on 14.12.2023.
    //
    
    #ifndef TERMINALHELPER_EVENTARGS_H
    #define TERMINALHELPER_EVENTARGS_H
    
    
    #include <vector>
    #include <string>
    
    using namespace std;
    
    class EventArgs {
    public:
        static const EventArgs Empty;
        
        virtual ~EventArgs();
    };
    
    class CmdEventArgs : public EventArgs
    {
    public:
        enum ReturnTypes{
            Nothing,
            Args
        };
    
        ReturnTypes content_type;
    
        vector<string> args;
    
        CmdEventArgs(ReturnTypes type);
    
        CmdEventArgs(ReturnTypes type, vector<string> args);
    
        static const CmdEventArgs Empty;
    };
    
    
    #endif //TERMINALHELPER_EVENTARGS_H
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    maaGames, если это чем-то поможет, я могу скинуть архив с проектом
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    maaGames, насколько я понял, это ничего не меняет. ошибка одна:
    g++.exe D:\Projects\TerminalHelper\Terminal.cpp -o Terminal
    D:\Games\CLion 2023.3\bin\mingw\bin/ld.exe: C:\Users\SAVVAN~1\AppData\Local\Temp\ccbgWMrS.o:Terminal.cpp:(.text+0x2d4): undefined reference to `EventArgs::~EventArgs()'
    D:\Games\CLion 2023.3\bin\mingw\bin/ld.exe: C:\Users\SAVVAN~1\AppData\Local\Temp\ccbgWMrS.o:Terminal.cpp:(.text$_ZN12CmdEventArgsC1ERKS_[_ZN12CmdEventArgsC1ERKS_]+0x64): undefined reference to `EventArgs::~EventArgs()'
    D:\Games\CLion 2023.3\bin\mingw\bin/ld.exe: C:\Users\SAVVAN~1\AppData\Local\Temp\ccbgWMrS.o:Terminal.cpp:(.text$_ZN12CmdEventArgsD1Ev[_ZN12CmdEventArgsD1Ev]+0x32): undefined reference to `EventArgs::~EventArgs()'
    D:\Games\CLion 2023.3\bin\mingw\bin/ld.exe: C:\Users\SAVVAN~1\AppData\Local\Temp\ccbgWMrS.o:Terminal.cpp:(.rdata$.refptr._ZN12CmdEventArgs5EmptyE[.refptr._ZN12CmdEventArgs5EmptyE]+0x0): undefined reference to `CmdEventArgs::Empty'
    D:\Games\CLion 2023.3\bin\mingw\bin/ld.exe: C:\Users\SAVVAN~1\AppData\Local\Temp\ccbgWMrS.o:Terminal.cpp:(.rdata$.refptr._ZN9EventArgs5EmptyE[.refptr._ZN9EventArgs5EmptyE]+0x0): undefined reference to `EventArgs::Empty'
    D:\Games\CLion 2023.3\bin\mingw\bin/ld.exe: C:\Users\SAVVAN~1\AppData\Local\Temp\ccbgWMrS.o:Terminal.cpp:(.rdata$.refptr._ZTV9EventArgs[.refptr._ZTV9EventArgs]+0x0): undefined reference to `vtable for EventArgs'
    collect2.exe: error: ld returned 1 exit status

    но я не понял почему она изменилась(я убрал строку и ошибка поменялась, но когда добавил обратно ничего не изменилось
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    maaGames, в h нет инициализации как в cpp
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    CMakeLists.txt
    cmake_minimum_required(VERSION 3.27)
    project(TerminalHelper)
    
    set(CMAKE_CXX_STANDARD 17)
    
    add_library(TerminalHelper STATIC Terminal.cpp
            Types/EventArgs.cpp
            Types/EventArgs.h
    )
    @maaGames,
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    maaGames, по моему у меня так и сделано:
    .h
    class EventArgs {
    public:
        static const EventArgs Empty;
        
        virtual ~EventArgs();
    };


    .cppconst EventArgs EventArgs::Empty = EventArgs();
    ---
    в cmd наследнике все также
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    class EventArgs {
    public:
        static const EventArgs Empty;
        
        virtual ~EventArgs();
    };
    Написано
  • Почему пишет неопределенный тип?

    @savva09 Автор вопроса
    я вас понял. теперь задаю вопрос возможно связанный с виртуальным деструктором.

    #include "Terminal.h"
    #include "Types/EventArgs.h"
    
    #include "string"
    
    using namespace std;
    
    void BasicTerminal::AddNewCommand(string command, TFunction exe_function, string description)
    {
        functions.push_back(exe_function);
        commands.push_back(command);
        descriptions.push_back(description);
    }
    
    EventArgs BasicTerminal::Execute(string input_command, CmdEventArgs args)
    {
        int index;
    
        for(int i = 0; i < commands.size(); i++)
        {
            if (input_command == commands[i]) index = i;
        }
    
        return functions[index](args);
    }
    
    BasicTerminal term;
    
    EventArgs Hello(CmdEventArgs args)
    {
        cout << "hello" << endl;
        return EventArgs::Empty;
    }
    
    int main()
    {
        term.AddNewCommand("hello", Hello, "prints hello");
        term.Execute("hello", CmdEventArgs::Empty);
    }


    D:\Games\CLion 2023.3\bin\mingw\bin/ld.exe: C:\Users\SAVVAN~1\AppData\Local\Temp\ccrPdaKh.o:Terminal.cpp:(.text+0x3d4): undefined reference to `CmdEventArgs::CmdEventArgs(CmdEventArgs::ReturnTypes)'
    D:\Games\CLion 2023.3\bin\mingw\bin/ld.exe: C:\Users\SAVVAN~1\AppData\Local\Temp\ccrPdaKh.o:Terminal.cpp:(.rdata$.refptr._ZN12CmdEventArgs5EmptyE[.refptr._ZN12CmdEventArgs5EmptyE]+0x0): undefined reference to `CmdEventArgs::Empty'
    collect2.exe: error: ld returned 1 exit status
    Написано