C++を勉強しだしてまだ1日位しかたっていません。
javaはある程度勉強してオブジェクト指向は触ったことがあります。
C++でクラスを宣言してプロトタイプ宣言だとかフィールドを入れてその後ソースファイルで定義して別の
ソースファイルでプロトタイプ宣言のヘッダをincludeすると実行できるようなのですが、定義が書かれていないヘッダをincludeしてなんで使えるようになるんですか?
includeして使えるようになる回答は"回答またはこのことについて勉強できるような用語"をお願いします。
実際ヘッダをincludeして実行したらエラーが出ました。
現在学習しているサイトのソースを入れても同じようなエラー文で失敗になりました。
c++
1//calc.h 2#ifndef _CALC_H_ 3#define _CALC_H_ 4class calc{ 5 private: 6 int a; 7 int b; 8 public: 9 int add(int a,int b); 10 int sub(int a,int b); 11 void set(int a,int b); 12}; 13#endif
c++
1//calc.cpp 2#include "calc.h" 3int calc::add(int a,int b){ 4 return a+b; 5} 6int calc::sub(int a,int b){ 7 return a-b; 8} 9void calc::set(int a1,int b2){ 10 a=a1; 11 b=b2; 12}
c++
1#include <iostream> 2#include "calc.h" 3using namespace std; 4int main(void){ 5 calc Cl; 6 int a=4; 7 int b=5; 8 int ans=0; 9 ans=Cl.add(a,b); 10 cout<<ans<<endl; 11}
//エラー文 In function `main': c:\free soft\learn_cpp\lclass/main.cpp:9: undefined reference to `calc::add(int, int)' collect2.exe: error: ld returned 1 exit status ターミナルの処理が終了しました (終了コード: 1)
classpathみたいな設定をしないといけないのかコードの書き方が悪いかすらわかりません
ファイル構成は
c:\free soft\learn_cpp\lclass*
*{
- .vscode((includepath,コマンドtask,lunch).json)
- main.cpp
- calc.h
- calc.cpp
}
コンパイラがGCCで
コマンドが
g++ -g -O0 -o main main.cpp
g++:c++コンパイル
-g:デバッグ情報付加
-O0:最適化レベル0(最適化しない)
-o:アウトプット
main:ファイル名.exe(main.exe)
ソースファイル名
回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/03 12:27