【问题标题】:Unresolved external symbol "public: <function_name>"未解析的外部符号“public:<function_name>”
【发布时间】:2021-04-18 07:25:51
【问题描述】:

当我尝试编译时,我得到这个错误:

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)

【问题讨论】:

    标签: c++ static c++14 static-methods unresolved-external


    【解决方案1】:
    static void A::FUNC_TEST(){}
    

    .cpp 文件的定义中删除static 关键字。

    另请参阅:https://en.cppreference.com/w/cpp/language/static

    编辑:

    如 cmets 中所述,问题是 A.cpp 未包含在 cmake 中。

    应该是add_executable(Ex1 main.cpp A.cpp)

    【讨论】:

    • @meowi 你如何构建你的主程序,A.cpp 没有被包括在内。
    • 确实是在 cmake 文件中设置的(其他的,非静态函数也可以正常工作)
    • @meowi 你现在给出的例子对我来说是不可重现的。您能否编辑您的帖子以添加您用于上述演示的CMakeLists.txt 文件。因为您的问题可能与您的 cmake 设置有关
    • 添加了 cmake 文件(感谢您这么努力地帮助我)
    • 哇,这就是问题所在 - 没有在 cmake 中包含源文件...可怕的菜鸟错误
    猜你喜欢
    • 2014-05-27
    • 2018-11-13
    • 1970-01-01
    • 2012-12-19
    • 2011-02-09
    • 2015-06-27
    相关资源
    最近更新 更多