0

基本的な C++ プログラムでリンクの問題が発生しています。.cppいいえ、ファイルは含めません!

これが起こっていることです。

main.cpp:

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

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

header.h:

#ifndef _HEADER_H
#define _HEADER_H

class Something {
public:
   printContents();
};

#endif

何か.cpp:

#include "header.h"

#include <iostream>

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

何が起こっているのかというと、次のような標準 C 関数の複数の定義というコンパイラ エラーが発生することですstrtod

g++ -o ... main.o
build/....main.o: 関数 `strtod' 内:

../MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/stdlib.h:318: `strtod' の複数定義

build/..something.o:...something.cpp:(.text+0x0): ここで最初に定義された collect2: ld は 1 つの終了ステータスを返しました

#include <iostream>2 つの場合のいずれかで s を取り除くと、コンパイルcoutされます。どうしたの?コンパイルには g++ と NetBeans を使用しています。

コマンドラインで試しました:

g++ *.h *.cpp -o program

そして同じことが起こりました。

4

6 に答える 6

4

は C++ ユーザー コードでは不正な名前であることに注意してください_HEADER_H。アンダースコアと大文字で始まる名前は、C++ 実装用に予約されています。これは通常、目立った問題を引き起こすことはありませんが、このコンテキストで HEADER のような実装で一般的な名前を使用すると、問題が発生する可能性があります。

于 2009-08-19T08:47:01.233 に答える
3

あなたの問題の1つはここにあります:

コマンドラインで試しました: g++ *.h *.cpp -o プログラム

ヘッダーファイルを渡さないでください...次のようなものを試してください:

g++ *.cpp -o プログラム

于 2009-08-19T08:46:39.910 に答える
3

正確な問題を再現できませんでした。これをコンパイルして、次のいくつかのメモとうまくリンクします。

  • void関数に戻り値の型を追加しprintContentsます(void printContents();ヘッダーとvoid Something::printContents() {実装ファイルに記載されています)
  • std::coutだけではなく使用してくださいcoutcout使用されるスコープで定義されていません
  • header.h が空白行で終わっていることを確認してください
  • HEADER_Hではなく使用_HEADER_H(ニール・バターワースが言うように)

コマンドラインを使用しg++ main.cpp something.cppてコンパイルします。

于 2009-08-19T08:52:01.740 に答える
2

いくつかの問題があります。関数の戻り値を定義する必要があります

printContents()

そして、あなたは書く必要があります

std::cout

書かないと

using namespace std;
于 2009-08-19T08:56:31.373 に答える
0

問題は、MinGW の複数インストールにありました。すでにインストールされていて、自分のコンピューターに Qt をインストールしたときに、独自の MinGW がインストールされていました。残念ながら、コードを大学のサーバーに移植したところ、問題なく動作しました。

バマー!!

助けてくれてありがとう、私は間違いなくあなたのガイドラインに従います。

ヘッダー名 - アンダースコアなし 正しい戻り値の型 フォーラムの実際のコード!

レオ・ブルザニティ

于 2009-08-21T01:31:08.220 に答える