this質問から例を借りました。以下のファイルがあります。関数定義がなくてもコンパイルに成功
main.cppに
#include <iostream>
#include "foop.h"
int main(int argc, char *argv[])
{
int x=42;
std::cout << x <<std::endl;
std::cout << foo(x) << std::endl;
return 0;
}
foop.h
#ifndef FOOP_H
#define FOOP_H
int foo(int a);
#endif
foop.cpp
int foo(int a){
return ++a;
}
main.cpp
にはfoop.h
が含まれていますが、foop.h
には、関数foo
の定義ではない宣言のみが含まれています。 main.cpp
はfoop.cpp
の存在とfoo
の定義をどのように知っていますか?私の最初の推測では*.h
の名前が*.cpp
のと同じであるならば、それは何らかの形で魔法のように動作するということでしたが、私はfoop.cpp
foop2.cpp
にPS名前を変更したら、それはまた、働いていた:私は、同じディレクトリ内で、一つのプロジェクトの下にファイルを保存しますVisual Studio内
PPS:何が起こっているかを見るために何らかの形でコンパイルプロセスをデバッグすることはできますか?
質問ごとに1つの質問をお願いします。簡潔な回答を書いたり、該当する場合は適切な詐称を見つけやすくしてください。 –
'私はファイルを1つのプロジェクトの下に置いています。 ' - これは重要な部分です。 MSVC++プロジェクトは、(一度コンパイルすると)一緒にリンクする必要があるファイルのグループです。別々のプロジェクトにあるファイルでは、あるプロジェクトをライブラリプロジェクトにして、その最初のプロジェクトを使用するように他のプロジェクトに指示する必要があります。 – MSalters
@MSaltersありがとう、これは答えになるはずです。 –