可能重复:
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;
}
答案 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()”)...那么只是将该值作为函数参数传递!
随着程序变得越来越复杂,你可能会开始使用类(而不是函数)。