-1

私はC++にかなり慣れていないので、ターミナルアプリケーションでこれから始めています。

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

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    if ( argc < 1 )
    {
        printHelp();
        return 1;
    }
    return 0;
}

void printHelp()
{
    cout << "Usage:";
    cout << "vmftomap [filename]";
}

ただし、_tmainに「'printHelp'識別子が見つかりません」というエラーが表示されます。関数はmainのすぐ下で宣言されているので、これは名前空間の問題だと思いますか?名前空間について調べましたが、printHelp()に対して実際に明示的に定義していないため、この場合に何が適用されるかわかりません。

4

4 に答える 4

1

関数を呼び出す前に、関数を宣言する必要があります。定義する必要はありませんが、コンパイラは、関数呼び出しを解決する必要がある瞬間に、少なくともその存在を知っている必要があります。つまり、変換ユニット(つまり.cppファイル)の処理中に宣言を満たしている必要があります。 :

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

using namespace std;

// Declaration
void printHelp();

int _tmain(int argc, _TCHAR* argv[])
{
    if ( argc < 1 )
    {
        printHelp();
        return 1;
    }
    return 0;
}

// Definition
void printHelp()
{
    cout << "Usage:";
    cout << "vmftomap [filename]";
}

もちろん、代わりにprintHelp()前に関数を直接定義することもできますmain()。これにより、関数呼び出しが行われた時点でコンパイラーに関数が表示されるようになります。

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

using namespace std;

// Definition
void printHelp()
{
    cout << "Usage:";
    cout << "vmftomap [filename]";
}

int _tmain(int argc, _TCHAR* argv[])
{
    if ( argc < 1 )
    {
        printHelp();
        return 1;
    }
    return 0;
}
于 2013-02-08T12:41:55.740 に答える
0

C ++では、ファイルは上から下に解析されます。いくつかの例外を除いて、識別子は使用する前に宣言する必要があります。printHelp()つまり、 beforeの定義を移動する_tmain()か、上記の前方宣言を追加する必要があり_tmain()ます。

void printHelp();
于 2013-02-08T12:41:40.530 に答える
0

関数は、使用する前に定義する必要があります。

printHelpを_tmainの上に移動します。

于 2013-02-08T12:41:42.050 に答える
0

C ++で関数を呼び出すときは、呼び出す前に、次のいずれかを行う必要があります。

  • 関数のプロトタイプを持っている
  • 関数全体の定義を持っている

あなたの場合、どちらも持っていません。

于 2013-02-08T12:41:57.353 に答える