C对函数进行未知引用

问题描述 投票:0回答:1

好吧...我不知道是我傻还是出了什么问题。我正在编写一个简单的 C++ 程序,但它无法编译。

我的 这是我的文件。假设“/”指的是项目根目录:

/CMakeLists.txt

cmake_minimum_required(VERSION 3.12.0)
project(test VERSION 0.1.0)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

add_subdirectory(modules)

/modules/CMakeLists.txt

add_subdirectory(directory)

add_executable(main main.c++)
target_link_libraries(main
    c
)

/modules/main.c++

#include "h.h++"

using namespace std;
using namespace somebody;

int main (int argc, char** argv)
{
    printHello();
    return 0;
}

/modules/directory/CMakeLists.txt

add_library(c c.c++)
set_target_properties(c PROPERTIES PUBLIC_HEADER "modules/directory/h.h++;")
target_include_directories(c PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")

/modules/directory/c.c++

#include <iostream>
#include "h.h++"

using namespace std;
using namespace somebody;

void printHello()
{
    cout << endl << "hello world" << endl;
}

/modules/directory/h.h++

#ifndef apple
#define apple

namespace somebody
{
    void printHello();
}

#endif

我知道我的命名空间名称,文件名有点愚蠢,但这是我整理的一个快速项目来演示错误。当我尝试构建项目时,出现以下错误:

undefined reference to `somebody::printHello()'

我对发生的事情感到困惑。

c++ cmake
1个回答
0
投票
c.c++ 中的

using namespace somebody;

 行是罪魁祸首。显然编译器将 c.c++ 中的函数定义解释为它自己的函数,而不是头文件中的定义。

© www.soinside.com 2019 - 2024. All rights reserved.