1

coutを使おうとすると、欲しい文ではなく乱数が出力されます。コンパイラエラーはなく、プログラムは正常に動作します。

これが私のコードです:

//question.h
#ifndef _QUESTION_H_
#define _QUESTION_H_

using namespace std;
int first()
{
    cout<<"question \n";
    return 0;
}

#endif

//main.cpp
#include <iostream>
#include "question.h"

using namespace std;

void main(){
    cout<<""<<first<<""<<endl;
    cin.ignore();
    cin.get();
}

私は自分のヘッダーファイルを書くのはかなり新しいので、それで何か間違ったことをしたのか、それともVisualStudioに問題があるのか​​わかりません。

4

3 に答える 3

5

関数のアドレスを出力しています。あなたはそれを呼び出す必要があります:

cout<<""<<first()<<""<<endl;
               ^^

コメントで述べたように、これも期待どおりに出力する必要はありません。関数への引数 (および関数呼び出しの集まり) の順序は指定されていないため、関数の出力はコンパイラが選択する任意の位置にある可能性があります。これを修正するには、別のステートメントを入れます。

cout<<"";
cout<<first(); //evaluated, so output inside first() printed before return value
cout<<""<<endl;

空の文字列では問題にならないかもしれませんが、それらを目に見えるものに置き換えると問題になります。

また、使用しないでくださいvoid mainint main()またはint main(int, char**)(ここを参照)を使用します。を使用しないでくださいusing namespace std;。特にヘッダーでは使用しないでくださいstd。そのステートメントには多くのがらくたが含まれており、簡単で紛らわしい競合が発生します (こちらを参照)。最後に、インクルード ガードとして実装用に予約されている識別子と競合しない名前を選択します。

于 2013-03-06T02:09:51.767 に答える
1

first関数を呼び出すのではなく、関数のアドレスを出力しています。しかし、関数呼び出しを変更しても、それ自体で問題が解決されるわけではありません。内部的にfirst書き込みを行ってからcout数値を返すためです。数値は表示されますが、これは望んでいるようには見えません。

first何かのように振る舞いたい場合<iomanip>は、さらにいくつかのフープをジャンプする必要があります-そのヘッダーを読んで、それがどのように行われるかを確認してください.

于 2013-03-06T02:09:59.233 に答える
0

アドレスを出力するcout<<""<<first()<<""<<endl; のではなく、実際に関数を呼び出す必要がある

于 2013-03-06T02:10:20.860 に答える