1

これは非常に単純なコードであり、同じコードを実行している他の人が持っているのと同じ方法で書いたにもかかわらず、エラーが発生するだけです

1>assigntment5.obj : エラー LNK2019: 未解決の外部シンボル "class std::basic_string,class std::allocator > __cdecl promptForString(class std::basic_string,class std::allocator >)" (?promptForString@@YA?AV ?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@Z) 関数 _main で参照 1>c:\users\aweb\documents\visual studio 2010 \Projects\Assignment5\Debug\Assignment5.exe: 致命的なエラー LNK1120: 1 つの未解決の外部

.cpp ファイル

#include <iostream>
#include <string>
#include "anw65_Library.h"

using namespace std;

string promptForString(string prompt);

int main()
{
string name = promptForString("What is the filename?: ");

system("pause");
return 0;
}   

.h ファイル

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

static string promptFromString(string prompt)
{
string filename;
cout << prompt;
cin >> filename;
return filename;
}  
4

3 に答える 3

3

あなたは決して定義しませんprompt**For**String、あなたが定義しprompt**From**Stringました。スペルが重要です。また:

  1. .h ファイルで関数を定義するのはなぜですか? そこで宣言し、.cpp ファイルで定義するだけです (テンプレートでない限り)。
  2. using namespace <whatever>ヘッダファイルを入れないでください。ヘッダーを含むもののグローバル名前空間をいじっているだけです。
  3. その関数を としてマークする必要はありませんstatic
于 2013-02-22T02:21:01.487 に答える
0

この行:

string promptForString(string prompt);

.cpp ファイルで問題が発生しています。外部リンケージを持つ関数を前方宣言しています。ただし、ヘッダーの機能は次のとおりです。

static string promptFromString(string prompt)
{
...

ここで重要な部分はstatic. 内部リンケージstaticがあることを意味します。関数は内部リンケージと外部リンケージの両方を持つことはできないため、 を取り除くか、前方宣言を取り除きます。static

編集:また、Ed S.はあなたのタイプミスで良い発見をしました。

于 2013-02-22T02:22:35.093 に答える
0

ファイルで定義しpromptForString()ている間にメイン関数から呼び出します。promptFromString().h

定義の 1 つを変更したい場合があります。

于 2013-02-22T02:23:24.850 に答える