我有一個printf的小問題,我不知道爲什麼!C++:命名空間和printf vs cout中的extern變量
=> kernel.h當
#ifndef KERNEL_H
#define KERNEL_H
namespace kernel
{
extern const double h;
}
#endif // KERNEL_H
=> kernel.cpp
#include <kernel.h>
namespace kernel
{
const double kernel::h=85.0;
}
=> main.cpp中
#include "kernel.h"
#include <iostream>
//#include <cstdio>//With cstdio, it is the same problem !
int main(int argc, char *argv[])
{
using namespace kernel;
double a = h;
printf("printf a is %d\n",a);
std::cout<<"std::cout a is " << a << std::endl;
printf("printf h is %d\n",h);
printf("printf kernel::h is %d\n",kernel::h);
std::cout << "std::cout h is " << h << std::endl;
return 0;
}
我的我的控制檯輸出:
printf a is 0
std::cout a is 85
printf h is 0
printf kernel::h is 0
std::cout h is 85
爲什麼printf不起作用?因爲它是一個C函數?
感謝
是否真的必要在kernel.cpp kernel.h當? – BillyJean 2013-05-09 17:11:33
這不是一個錯誤,但cpp文件中的定義過多。你可以做'const double kernel :: h = 85.0'(不用重新打開命名空間),或者如果你重新打開它,只需要'const double h = 85.0'。你有點「做了兩個」,這是多餘的。 – AnT 2013-05-09 17:11:36