スラスラわかるC++で、実行するとエラー4_5 g++ -o list4_5.exe list4_5.cpp でコンパイルすると undefined reference to `getBmi(double, double)’ collect2.exe: error: ld returned 1 exit status

スラスラC++で、実行するとエラー

C:\samples\chapter04\4_5>cd C:\samples\chapter04\4_5\ 
C:\samples\chapter04\4_5>g++ -o list4_5.exe list4_5.cpp 
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: 
C:\Users\furcr\AppData\Local\Temp\ccs3yFYU.o:list4_5.cpp:(.text+0x72): 
undefined reference to `getBmi(double, double)' collect2.exe: error:
 ld returned 1 exit status

解決方法

chapter4.h

// BMIを求める関数のプロトタイプ宣言
double getBmi(double height, double weight);

getBmi.cpp

double getBmi(double height, double weight) {
  double bmi;	// BMIの計算結果を入れる

  // cm単位をm単位にする
  height /= 100;

  // BMIを計算する
  bmi = weight / height / height;

  // 戻り値としてBMIを返す
  return bmi;
}

list4_5.cpp

#include <iostream>
using namespace std;
#include "chapter4.h"

int main() {
  double height;	// 身長
  double weight;	// 体重
  double bmi;		// BMI

  // キー入力をheightに格納する
  cout << "身長(cm)を入力してください:";
  cin >> height;

  // キー入力をweightに格納する
  cout << "体重(kg)を入力してください:";
  cin >> weight;

  // 身長と体重からBMIを計算する
  bmi = getBmi(height, weight);

  // BMIを画面に表示する
  cout << "あなたのBMIは、" << bmi << "です。" << endl;

  return 0;
}

cd_samples4_5_header.cmd


C:\samples\chapter04\4_5>cd C:\samples\chapter04\4_5\

C:\samples\chapter04\4_5>g++ list4_5.cpp getBmi.cpp -o list4_5.exe

C:\samples\chapter04\4_5>list4_5.exe
身長(cm)を入力してください:167
体重(kg)を入力してください:75
あなたのBMIは、26.8923です。

C:\samples\chapter04\4_5>cmd /k
C:\samples\chapter04\4_5>
  1. 関数の定義を確認:
    • chapter4.h ファイル内で getBmi(double height, double weight) 関数の実装が正しく行われていることを確認してください。
    • chapter4.h には関数のプロトタイプ宣言が含まれているはずですが、実際の関数の定義が別のファイル(おそらく chapter4.cpp など)にあるはずです。
  2. コンパイル時に関連するファイルを指定:
    • コンパイル時に list4_5.cpp と関連するファイルを一緒に指定する必要があります。例えば、次のようにコンパイルしてみてください。
    g++ list4_5.cpp getBmi.cpp -o list4_5.exe
    • chapter4.cpp のファイル名は実際のファイル名に合わせて修正してください。
  3. 再コンパイルと実行:
    • 上記の修正を行ったら、再度コンパイルして実行してみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です