我想不是代码的错,试了用vc98可以编译,但是用gcc就不行,用gcc写其他链接还是这个问题。
我还把代码贴上来吧。
头文件.....................
ifndef SALES_H_INCLUDED
define SALES_H_INCLUDED
namespace SALES
{
const int Q=4;
struct Sales
{
double sales[Q];
double average;
double max;
double min;
};
void setsales(Sales& s,const double ar[],int n);
void setsales(Sales& s);
void showsales(const Sales& s);
}
#endif // SALES_H_INCLUDED
源文件1.................................
#include#include"sales.h" namespace SALES { using namespace std; void setsales(Sales& s,const double ar[],int n) { double max=ar[0],min=ar[0],sum=ar[0]; for(int i=1;i max) max=ar[i]; if(ar[i]
main源文件............................
includeinclude"sales.h" using namespace std; int main() { using namespace SALES; Sales m1,m2; double a[4]={1.1,2.2,3.3,4.4}; setsales(m1,a,4); }
问题改过了?为什么我直接编译就过了
环境:windows10rs1, msys2, g++6.2
我也是用的CodeBlocks。。
不知道你勾选了“编译”和“链接”没有?
VS2015的clang大部分兼容gcc,可以通过编译,楼上的知乎问题主要是template函数,函数声明与定义要在同一头文件下的。所以我个人认为是编译器问题吧
我觉得是const 的问题 是C/C++编译为obj文件的时候并不需要函数的具体实现,只要有函数的原型即可。但是在链接为可执行文件的时候就必须要具体的实现了。如果错误是未声明的引用,那就是找不到函数的原型,解决办法通常是相关的头文件未包含。
传送门
我将setsales函数定义在sales.h文件里就编译通过了。
这有一个类似的问题:https://www.zhihu.com/questio...