小编Qua*_*ark的帖子

C ++链接错误,符号重新定义

我最近遇到了一个问题。

我有三个文件,Ah,B.cpp和C.cpp:

#ifndef __A_H__
#define __A_H__

int M()
{
    return 1;
}

#endif // __A_H__
Run Code Online (Sandbox Code Playgroud)

丙型肝炎

#include "A.h"
Run Code Online (Sandbox Code Playgroud)

丙型肝炎

#include "A.h"
Run Code Online (Sandbox Code Playgroud)

当我通过MSVC编译这三个文件时,出现一个错误:

C.obj : error LNK2005: "int __cdecl M(void)" (?M@@YAHXZ) already defined in B.obj
Run Code Online (Sandbox Code Playgroud)

众所周知,B.obj有一个名为“ M”的符号,C.obj也有一个“ M”。错误来了。

但是,如果我将M方法更改为包含如下所示的方法M的类:

#ifndef __A_H__
#define __A_H__

class CA
{
public:
    int M()
    {
        return 1;
    }
};

#endif // __A_H__
Run Code Online (Sandbox Code Playgroud)

没有更多的错误!有人可以告诉我发生了什么吗?

visual-c++

2
推荐指数
1
解决办法
1745
查看次数

标签 统计

visual-c++ ×1