0

重複の可能性:
C++: 関数からメイン変数にアクセスする最も簡単な方法は?

a.cpp のメイン関数から b.cpp の check という名前の別の関数に変数「入力」を取得する必要があります。Google とこのフォーラム/シングで調べたところ、 を使用してグローバル変数を使用して実行できることがわかりまし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;
}
4

2 に答える 2

3

関数の引数としてデータを渡す。

例えば:

int doSomething(int passedVar)
{
}

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

    return 0;
}

関数定義は、別の cpp ファイルにも存在する可能性があることに注意してください。関数宣言を確認する必要があるmainだけで、リンカは関数定義を正しくリンクする必要があります。

通常、関数宣言をヘッダー ファイルに追加し、ヘッダー ファイルを main にインクルードし、関数定義を別の cpp ファイルに提供します。


あなたが示すコードには多くの問題があります:

  • mainヘッダー ファイルで 宣言する必要はありません。
  • 関数宣言と の定義がcheck()一致しません。ヘッダー ファイルには引数がないと書かれており、引数を 1 つ取るように関数定義を定義します。明らかに、それらは一致しません。現状では、これらは 2 つの完全に異なる機能です。

コンパイラがそれを見ると、提供したことのない定義の 1 つの関数を宣言し、cpp ファイルで別の関数を定義しました。したがって、宣言された関数 (パラメーターのないもの) は定義されていないため、定義が見つからないというエラーが発生します。

于 2012-12-31T03:32:52.220 に答える
0

アンドレイ・ティタは完全に正しいです。あるモジュールに「値」があり (例: a.cpp の「main()」)、関数でその値を使用したい場合 (例: b.cpp の「foo()」) ...その値を関数の引数として渡します!

プログラムがより洗練されるにつれて、おそらく (関数の代わりに) クラスを使い始めるでしょう。

于 2012-12-31T03:33:38.640 に答える