Общедоступный неразрешенный внешний символ: ‹имя_функции›

Когда я пытаюсь скомпилировать, я получаю эту ошибку:

LNK2019: неразрешенный внешний символ public: static void __cdecl A::FUNC_TEST(void)

Заголовок выглядит следующим образом:

#pragma once
class A
{    
public:
    static A global_var;

private:
    A();
    virtual ~A();
    A(const A&) = delete;
    A& operator=(const A&) = delete;

public:
        static void FUNC_TEST();
};

в то время как исходный файл выглядит следующим образом:

#include "A.hpp"
A A::global_var; 

A::A(){}

A::~A(){}

static void A::FUNC_TEST(){}

и основная функция:

#include <iostream>
#include "A.hpp"

int main() {
    
    A::FUNC_TEST();
    
    return 0;
}

Мне не хватает чего-то простого. До сих пор я искал много похожих вопросов, и большинство из них закончилось отсутствием объявления global_var или спецификатора доступа для имени класса.

Очень ценю вашу помощь.

РЕДАКТИРОВАТЬ: файл cmake:

cmake_minimum_required(VERSION 3.17)
project(Ex1)

set(CMAKE_CXX_STANDARD 14)

add_executable(Ex1 main.cpp)

person meowi    schedule 13.01.2021    source источник


Ответы (1)


static void A::FUNC_TEST(){}

Удалите ключевое слово static из определения в файле .cpp.

См. также: https://en.cppreference.com/w/cpp/language/static

Редактировать:

Как упоминалось в комментариях, проблема заключалась в том, что A.cpp не было включено в cmake.

Должно быть add_executable(Ex1 main.cpp A.cpp)

person 0RR    schedule 13.01.2021
comment
к сожалению это не помогает.. - person meowi; 13.01.2021
comment
@meowi, как ты создаешь свою основную программу, A.cpp не включается. - person 0RR; 13.01.2021
comment
он действительно установлен в файле cmake (другие нестатические функции работают нормально) - person meowi; 13.01.2021
comment
@meowi Пример, который вы привели на данный момент, для меня не воспроизводим. Можете ли вы отредактировать свой пост, чтобы добавить файл CMakeLists.txt, который вы используете для приведенной выше демонстрации. Поскольку ваша проблема может быть связана с настройкой cmake - person 0RR; 13.01.2021
comment
добавил файл cmake (спасибо, что так старались мне помочь) - person meowi; 13.01.2021
comment
вот в чем проблема - не включил исходные файлы в cmake... ужасная ошибка новичка - person meowi; 13.01.2021
comment
@meowi рад, что ты решил это - person 0RR; 13.01.2021