0

Xcode を使用していますが、文字列オブジェクト自体への参照を渡すときにコンパイルを拒否します。

(string &text, string remove)

それなし&でコンパイルします。私のコードが間違っているのでしょうか、それともプロジェクト ファイルに問題があるのでしょうか?

これはコンパイラエラーです:

Undefined symbols for architecture i386:
"removeLetters3(std::string, std::string)", referenced from:
  Main() in narcissism.o
 ld: symbol(s) not found for architecture i386
 clang: error: linker command failed with exit code 1 (use -v to see invocation)

コード:

string removeLetters3(string &text, string remove)
{
for (int i = 0; i < remove.length(); i++)
{
    int pos = 0;

    while ((pos = text.find(remove[i], pos)) != string :: npos)
    {
        text.replace(pos, 1, "");
    }
}
return "";
}

関数の呼び出し方法は次のとおりです。

string text;
string rletter;
removeLetters3(text, rletter);
4

1 に答える 1

3

あなたのコードには何も問題はありませんが、あなたのエラーから判断すると、呼び出し元が見る宣言は次のようになると思います:

string removeLetters3(string text, string remove);

実装が読み取っている間

string removeLetters3(string &text, string remove) {

したがって、リンカーが最初の実装の実装を見つけようとすると、そのような実装がないため失敗します。

これは、次のエラーによって証明されます。

Undefined symbols for architecture i386:
"removeLetters3(std::string, std::string)", referenced from:
  Main() in narcissism.o

署名に注意してください。それは言っていません

Undefined symbols for architecture i386:
"removeLetters3(std::string&, std::string)", referenced from:
  Main() in narcissism.o
于 2012-11-09T01:51:42.347 に答える