【问题标题】:C++ how can I link my main class with my header file?C ++如何将我的主类与我的头文件链接?
【发布时间】:2016-06-02 14:04:37
【问题描述】:

这是最基本的,但我有一个带有函数原型的头文件 Test.h。然后是带有函数定义的源代码文件,Test.cpp。最后,我有调用 Test.cpp 中的函数的 Main.cpp 文件。问题是我在 Main.cpp 中收到一个错误,指出 function1 未定义。你能看出我做错了吗?

测试.h

int function1(int);

Test.cpp

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

int main(){
}

int function1(int i){
    std::cout << "fuction1(" << i << ")" << std::endl << "Returns: 1" << std::endl;

    return 1;
}

Main.cpp

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

int main(){

    function1(5);
}

在我添加一个 main() 函数之前,Test.cpp 也没有编译。我对java很流利,这似乎与我的想法相矛盾。在 java 中,我只会在我的主类中找到一个主方法。其他类有一个构造函数。请帮我建立从 java 到 c++ 的连接。

【问题讨论】:

  • "你能看出我做错了什么吗?"不,因为你没有向我们展示你是如何使用你的编译器的。
  • 我在编译 Test.cpp 没有完全多余的 main() 时没有问题。在这个问题中,你没有展示你正在做的一切。从 Test.cpp 中删除 main() 后,显示的代码绝对没有问题。因此,您未显示的代码和/或其他文件/脚本一定有问题。
  • @MikeCAT 我正在使用代码块 IDE。有一个自动构建按钮。根据您的评论,我假设我必须制作一个 makefile 来指定应该如何进行编译?
  • @Vindictive 我猜你正在尝试编译单个文件,你应该创建一个“项目”来编译和链接多个文件。
  • 你必须告诉你的IDE你的项目包含两个翻译单元。我不熟悉那个IDE,所以我不能告诉你怎么做;但看起来您只是想在 IDE 中构建两个独立的翻译单元,彼此独立,而您需要配置您的 IDE,以便它知道两个翻译单元是一个项目。

标签: c++


【解决方案1】:

你必须告诉编译器它应该链接什么。

首先,删除test.cppmain()的定义,因为试图将多个非静态main()放在一个可执行文件的全局命名空间中会导致链接错误。

然后,正确使用您的编译器。例如,如果您使用 GCC,

g++ -o Main Main.cpp Test.cpp

g++ -c -o Main.o Main.cpp
g++ -c -o Test.o Test.cpp
g++ -o Main Main.o test.o

【讨论】:

  • 非常感谢迈克,谢谢。
猜你喜欢
  • 2021-07-27
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 2018-01-30
  • 2019-04-04
相关资源
最近更新 更多