You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++矩阵乘法测试报Linker2005重复定义错误如何解决?

错误原因

LNK2005重复定义错误的核心诱因是你在stress.cpp中直接引入了.cpp源文件,违背了C++的常规编译规则:

  • 默认情况下,每个.cpp文件都会作为独立编译单元单独编译,生成对应的.obj目标文件
  • 你的naive.cpp、strassen.cpp会分别生成naive.obj、strassen.obj,各自携带naive、strassen函数的实现定义
  • stress.cpp中#include "naive.cpp"和#include "strassen.cpp"的操作,相当于把两个源文件的代码完全拷贝到了stress.cpp中,编译生成的stress.obj也会携带这两个函数的实现定义
  • 链接阶段三个.obj文件存在重复的函数符号,就会触发重复定义错误。
修复方案

正规方案(推荐)

  1. 新增两个头文件,分别存放函数声明:

naive.h

#pragma once
#include <vector>
using namespace std;

vector<vector<int>> naive(vector<vector<int>>a, vector<vector<int>>b);

strassen.h

#pragma once
#include <vector>
using namespace std;

vector<vector<int>> strassen(vector<vector<int>>a, vector<vector<int>>b);
  1. 修改stress.cpp的引入代码,将原本引入.cpp的两行替换为引入头文件:
// 替换掉原来的 #include "naive.cpp" #include "strassen.cpp"
#include "naive.h"
#include "strassen.h"
  1. 保持三个.cpp文件都加入项目编译列表即可正常编译链接。

临时方案(不推荐)

直接把naive.cpp和strassen.cpp从项目的编译列表中移除,不需要修改stress.cpp的引入代码。因为stress.cpp已经包含了两个算法的完整实现,不会再生成对应obj文件,也就不会出现符号重复的问题。

额外注意事项

你当前strassen函数直接返回输入矩阵a,仅当b为单位矩阵时计算结果才会和朴素矩阵乘法结果一致,正常随机输入下测试会直接判定结果错误,后续实现完Strassen算法逻辑后即可恢复正常测试。


内容的提问来源于stack exchange,提问作者Ahmed Hossam Aldeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:24:03