还有一个链接器问题 我和一个基本的C++程序有联系。不,我没有包括.cpp文件

还有一个链接器问题 我和一个基本的C++程序有联系。不,我没有包括.cpp文件,c++,linker,header-files,C++,Linker,Header Files,这就是正在发生的事情 main.cpp: #include "header.h" #include <iostream> int main() { std::cout << "Hello!"; } something.cpp: #include "header.h" #include <iostream> Something::printContents() { cout << "This class's Contents!!

这就是正在发生的事情

main.cpp:

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

int main() {
   std::cout << "Hello!";
}
something.cpp:

#include "header.h"

#include <iostream>

Something::printContents() {
    cout << "This class's Contents!!";
}

同样的事情也发生了。

您的问题之一就在这里:

我在命令行中尝试了:g++*.h *.cpp-o程序

不要传递头文件。。。试着这样做:

g++*.cpp-o程序


<>请注意,“HythErthHi/Cuth>”是C++用户代码中的一个非法名称,从下划线开始的名称和为C++实现保留的大写字母。这通常不会引起明显的问题,但当您在该上下文中使用诸如HEADER之类的实现中的通用名称时,很可能会出现问题。

Modify

Something::printContents() 
{    
  std::cout << "This class's Contents!!";
}
Something::printContents()
{    

std::cout我无法重现您的确切问题。我将其编译并与以下几个注释很好地链接:

  • void
    返回类型添加到
    printContents
    -函数中(因此它在标题中显示
    void printContents();
    ,在实现文件中显示
    void Something::printContents(){
  • 使用
    std::cout
    而不仅仅是
    cout
    cout
    未在其使用范围内定义
  • 确保页眉.h以空行结尾
  • 使用
    HEADER\u H
    而不是
    \u HEADER\u H
    (如尼尔·巴特沃斯所说)

我使用命令行
g++main.cpp something.cpp
进行编译。

我发现了几个问题。您需要定义函数的返回值

printContents()
你必须写

std::cout
如果你不写信

using namespace std;

问题出在MinGW的多个安装中。我已经安装了一个,当我在我的计算机上安装Qt时,它已经安装了自己的MinGW。糟糕,我把代码移植到我大学的服务器上,它运行正常

糟糕

谢谢大家的帮助,我以后一定会遵循你们的指导方针

标题名称-无下划线 正确的返回类型 真正的代码在论坛


Leo Bruzzaniti

我很惊讶你居然能用这些代码访问链接器。你能详细说明你是如何编译和链接的吗?我最终解决了。修复了代码和#ifndef修复了所有问题。我仍然不能完全确定错误是如何发生的。我自己制作了makefile,错误似乎已经消失了。应该,但我只是指出在命令行上尝试的错误。其他回答者已经指出了实际的代码错误。我现在明白你的答案了!:)虽然编译头是一件毫无意义的事情,但它也是无害的-毕竟,编译
foo.h
与编译
foo.cpp
完全相同,它由一行
\include>组成<如果代码试图根据文件扩展名在C和C++之间切换,那么我想它可能会混淆编译器。我相信VC++可以做到这一点,但是GCC/G++没有这样的歧义,对吗?谢谢大家的提示。r quick.谢谢你的提示。也请大家注意-不要这样做!始终使用复制和粘贴发布真实代码。将来会做得更好-我相信每个人都经历了“为你的生活键入”阶段..我道歉。
std::cout
using namespace std;