1. ホーム
  2. c++

[解決済み] C++の定義済み関数への未定義参照

2022-03-04 19:11:10

質問

なぜこれがうまくいかないのかがわかりません。 私のファイルを3つとも置いておきますので、どなたかこのエラーを投げる理由を教えてください。 プログラムをコンパイルするのに、g++を使用しています。

プログラム

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

using namespace std;

int main()
{
  char sentence[MAX_SENTENCE_LENGTH];
  char writeTo[] = "output.txt";
  int distanceTo,likePosition, length, numWords;
  cout << "ENTER A SENTENCE!   ";
  cin.getline(sentence, 299);
  length = strlen(sentence);
  numWords = wordCount(sentence, length);
  for(int x = 0; x < 3; ++x)
  {
    likePosition = likePos(numWords);
    distanceTo = lengthTo(sentence, likePosition, length);
    insertLike(sentence, distanceTo, length, writeTo);
  }
  return 0;  
}

関数ファイルです。

void insertLike(const char sentence[],  const int lengthTo, const int length, char writeTo[])
{
  char part1[MAX_SENTENCE_LENGTH], part2[MAX_SENTENCE_LENGTH];
  char like[] = " like ";
  for(int y = 0; y < lengthTo; ++y)
    part1[y] = sentence[y];
  for(int z = lengthTo+1; z < length - lengthTo; ++z)
    part2[z] = sentence[z];
  strcat(part1, like);
  strcat(part1, part2);
  writeToFile(sentence, writeTo);
  return;
}

ヘッダーファイルです。

void insertLike(const char sentence[], const int lengthTo, const int length, const char writeTo[]);

正確にはエラーです。

undefined reference to 'insertLike(char const*, int, int, char const*)'
collect2: ld returned 1 exit status

解決方法は?

の宣言と定義は insertLike は異なる

ヘッダーファイルで

void insertLike(const char sentence[], const int lengthTo, const int length, const char writeTo[] );

ファンクションファイル」の中に

void insertLike(const char sentence[], const int lengthTo, const int length, char writeTo[] );

C++では、関数のオーバーロードが認められており、異なる引数を持つ限り、同じ名前の関数/メソッドを複数個持つことができます。引数の型は関数のシグネチャの一部となります。

この場合 insertLike を取る const char* を第4パラメータとし insertLike を取るもので char * を4番目のパラメータとして使用します。 異なる関数 .