java - c++ gcc多文件链接出现undefined reference to怎么解决?

 mobiledu2502876027 发布于 2022-10-26 16:52

我想不是代码的错,试了用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;imax)
                max=ar[i];
            if(ar[i]

main源文件............................

include
include"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);
}
4 个回答
  • 问题改过了?为什么我直接编译就过了

    环境:windows10rs1, msys2, g++6.2

    2022-10-27 01:21 回答
  • 我也是用的CodeBlocks。。
    不知道你勾选了“编译”和“链接”没有?

    2022-10-27 01:22 回答
  • VS2015的clang大部分兼容gcc,可以通过编译,楼上的知乎问题主要是template函数,函数声明与定义要在同一头文件下的。所以我个人认为是编译器问题吧

    2022-10-27 01:22 回答
  • 我觉得是const 的问题 是C/C++编译为obj文件的时候并不需要函数的具体实现,只要有函数的原型即可。但是在链接为可执行文件的时候就必须要具体的实现了。如果错误是未声明的引用,那就是找不到函数的原型,解决办法通常是相关的头文件未包含。
    传送门
    我将setsales函数定义在sales.h文件里就编译通过了。
    这有一个类似的问题:https://www.zhihu.com/questio...

    2022-10-27 01:22 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有