-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' identifier not found”。由于该函数直接在 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++ 中调用函数时,在调用之前,您必须:

  • 有一个函数的原型
  • 有整个函数的定义

在你的情况下,你没有。

于 2013-02-08T12:41:57.353 回答
0

在 C++ 中,文件是从上到下解析的。除了少数例外,必须在使用标识符之前声明它们。这意味着您必须移动printHelp()before的定义_tmain(),或者在上面添加前向声明_tmain()

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

该函数必须在使用前定义。

将 printHelp 移到 _tmain 上方。

于 2013-02-08T12:41:42.050 回答