C ++我应该做什么而不是全局变量?

时间:2012-12-31 03:29:10

标签: c++ global

  

可能重复:
  C++: Easiest way to access main variable from function?

我需要从a.cpp中的main函数获取变量“input”到另一个名为check in b.cpp的函数。我在谷歌和这个论坛/东西上调查了一下,我发现你可以使用extern对全局变量进行调查,但是使用它们也是不好的,我找不到替代方案的答案?如何在不使用全局变量的情况下将变量中的数据传输到另一个函数?


我如何得到工作的参数的代码。 (我在这里要做的是一个控制台“管理器”,用于项目Euler的解决方案,我可以通过输入调用解决/查看,我在40分钟前开始处理代码。)

的main.cpp

#include <iostream>
#include <windows.h>
#include "prob.h"

using namespace std;

int check(string x);

int main()
{
    string input = "empty";
    clear();

    cout << "Welcome to the Apeture Labs Project Euler Console! (ALPEC)" << endl << endl;
    cout << "We remind you that ALPEC will never threaten to stab you" << endl;
    cout << "and, in fact, cannot speak. In the event that ALPEC does speak, " << endl;
    cout << "we urge you to disregard its advice." << endl << endl;
    cin >> input;
    cin.get();
    check(input);

    cout << input << endl;
    cin.get();
    return 0;
}

prob.h

#ifndef PROB_H_INCLUDED
#define PROB_H_INCLUDED

int main();

int clear();
int check();
int back();

int P1();
int P2();
int P3();
int P4();

#endif // PROB_H_INCLUDED

back.cpp

#include <iostream>
#include <windows.h>
#include "prob.h"

using namespace std;

int clear()
{
    system( "@echo off" );
    system( "color 09" );
    system( "cls" );

    return 0;
}

int check( string x )
{
    if( x == "help" );

    if( x == "empty" )
    {
        cout << "And....  You didn't enter anything..." << endl << endl;
    }

    else
    {
        cout << "Do you have any clue what you are doing? " << endl << endl;
    }

    return 0;
}

2 个答案:

答案 0 :(得分:3)

将数据作为函数参数传递。

例如:

int doSomething(int passedVar)
{
}

int main()
{
    int i = 10;
    doSomething(i);

    return 0;
}

请注意,函数定义甚至可能驻留在不同的cpp文件中。 main只需要查看函数声明,链接器应正确链接函数定义。

通常,可以在头文件中添加函数声明,并在main中包含头文件,同时在另一个cpp文件中提供函数定义。


您展示的代码有很多问题:

  • 您无需在头文件中声明main
  • 您的函数声明和check()的定义不匹配。你的头文件说它不需要参数,你定义一个函数定义来获取一个参数。显然,他们不匹配。他们现在的立场是两个完全不同的功能。

当编译器看到它时,你声明了一个你从未提供过定义的函数,你在cpp文件中定义了另一个函数。因此,从未定义声明的函数(一个没有参数),因此找不到定义错误。

答案 1 :(得分:0)

Andrei Tita绝对正确。如果你在一个模块中有一个“值”(例如a.cpp中的“main()”),并且你希望在函数中使用该值(例如b.cpp中的“foo()”)...那么只是将该值作为函数参数传递!

随着程序变得越来越复杂,你可能会开始使用类(而不是函数)。