gpt4 book ai didi

c++ - 函数定义在类外部时出现链接器错误

转载 作者:行者123 更新时间:2023-11-28 02:41:16 25 4
gpt4 key购买 nike

我有文件::

//ClassA.h
#ifndef ClassA_H
#define ClassA_H

#pragma once
class ClassA
{
public:
void func1(){


}
ClassA(void) {

}
~ClassA (void) {


}

};

#endif

//ClassA1.h
#include "ClassA.h"

class ClassA1 {
ClassA<2> b;
};


//ClassA1.cpp

#include "ClassA1.h"

//main_file.cpp
#include "ClassA1.h"
#include "iostream"
int main (int argc , char** argv) {

std::cout<<"in main"<<std::endl;
}

所以这个编译很好...只要我在 Class.h 中的类之外定义类 ClassA 的函数,我就会在构建过程中遇到以下错误

1>  LINK : c:\users\adudeja\documents\visual studio 2010\Projects\Test\Debug\Test.exe not found or not built by the last incremental link; performing full link
1>ClassA1.obj : error LNK2005: "public: void __thiscall ClassA::func1(void)" (?func1@ClassA@@QAEXXZ) already defined in main_file.obj
1>ClassA1.obj : error LNK2005: "public: __thiscall ClassA::ClassA(void)" (??0ClassA@@QAE@XZ) already defined in main_file.obj
1>ClassA1.obj : error LNK2005: "public: __thiscall ClassA::~ClassA(void)" (??1ClassA@@QAE@XZ) already defined in main_file.obj
1>c:\users\adudeja\documents\visual studio 2010\Projects\Test\Debug\Test.exe : fatal error LNK1169: one or more multiply defined symbols found

那么在类外定义函数和在类内定义函数有什么区别。

下面是非工作代码...

#ifndef ClassA_H
#define ClassA_H

#pragma once
class ClassA
{
public:
void func1();
ClassA(void);
~ClassA(void);

};
void ClassA::func1(){


}
ClassA::ClassA(void) {

}
ClassA::~ClassA (void) {


}

#endif

最佳答案

So what is the difference between defining function outside class and inside class.

当您在类主体中定义它时,它是隐式内联,并且可以在多个文件中定义一个内联函数。

非内联函数必须只定义一次。

因此,要么将非内联定义放入单个 .cpp 文件中,而不是放在多个文件包含的 header 中,要么使用 inline 关键字定义它。

关于c++ - 函数定义在类外部时出现链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25911167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com