当我尝试使用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();
}
我很自然地编写自己的头文件,所以我不确定我是否做错了,或者是否存在visual studio的问题。
答案 0 :(得分:5)
您正在打印该功能的地址。你需要打电话给它:
cout<<""<<first()<<""<<endl;
^^
正如评论中所提到的,这也不一定要输出你期望的结果。函数的参数(也就是一堆函数调用)的顺序是未指定的,因此您的函数输出可以位于编译器选择的任何位置。要解决此问题,请单独声明:
cout<<"";
cout<<first(); //evaluated, so output inside first() printed before return value
cout<<""<<endl;
空字符串可能无关紧要,但是当你用可见的东西替换那些字符串时,它就会无关紧要。
另外,请勿使用void main
。使用int main()
或int main(int, char**)
(see here)。不要使用using namespace std;
,尤其是在标题中,因为std
中包含大量废话并导致容易混淆的冲突(see here)。最后,选择一个与identifiers reserved for the implementation不冲突的名称作为包含警示。
答案 1 :(得分:1)
您正在打印函数first
的地址而不是调用它。但是更改函数调用本身并不能解决您的问题,因为first
会在内部写入cout
,然后返回一个将打印的数字,这似乎不是您想要的
如果你希望first
像<iomanip>
那样行事,你必须跳过几个箍 - 阅读那个标题,看看它是如何完成的。
答案 2 :(得分:0)
使用cout<<""<<first()<<""<<endl;
您需要实际调用该函数,而不是打印其地址