VS2012 - 为什么主文件中的函数在_tmain中不可见?

时间:2013-02-08 12:39:02

标签: c++ namespaces

我对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 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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

void printHelp();

答案 2 :(得分:0)

在使用之前必须定义该功能。

将printHelp移到_tmain上方。

答案 3 :(得分:0)

在c ++中调用函数时,在调用之前,您必须:

  • 有一个功能原型
  • 具有整个功能的定义

在你的情况下,你没有。