提问人:Sangita Paul 提问时间:7/30/2022 最后编辑:Vlad from MoscowSangita Paul 更新时间:7/30/2022 访问量:124
未解析的外部符号“枚举天数__cdecl运算符++(枚举日)”(??E@YA?AW4days@@W40@@Z) 在函数 main 中引用
Unresolved external symbol "enum days __cdecl operator++(enum days)" (??E@YA?AW4days@@W40@@Z) referenced in function main
问:
我写了一个小程序,通过给予一天来遇到第二天。
我在day_enum.cpp文件中编写了一个程序:-
#include <ostream>
#include "AllHeader.h"
using namespace std;
inline days operator++(days d)
{
return static_cast<days>((static_cast<int>(d) + 1) % 7);
}
ostream& operator<< (ostream& out,const days& d)
{
switch (d)
{
case SUN: out <<"SUN";
break;
case MON: out <<"MON";
break;
case TUE: out<<"TUES";
break;
case WED: out <<"WED";
break;
case THUS: out <<"THUS";
break;
case FRI: out <<"FRI";
break;
case SAT: out << "SAT";
break;
default:
break;
return out;
}
}
现在 allheader.h 文件看起来像这样:-
#pragma once
#ifndef AllHeader
#define AllHeader
typedef enum days { SUN, MON, TUE, WED, THUS, FRI, SAT } days;
inline days operator++(days d);
ostream& operator<< (ostream& out, const days& d) ;
#endif
主要功能:-
days d = MON, e;
e = ++d;
cout << d << '\t' << e << endl;
我收到错误:- LNK2019未解析的外部符号“枚举天数__cdecl运算符++(枚举日)”(??E@YA?AW4days@@W40@@Z) 在函数 main 中引用。
根据我的理解,我已经在 allheader.h 文件中声明了它。
答:
2赞
Vlad from Moscow
7/30/2022
#1
根据 C++ 标准
在每次翻译中都应定义一个内联函数或变量 在丢弃语句之外使用 ODR 的单位。
似乎在翻译单元中没有内联函数(运算符)的定义。main
将函数的定义放在标头中。
评论
0赞
Sangita Paul
7/31/2022
只是为了理解当我使用内联函数时,我还需要提供函数定义,以便 c++ 编译器存储它并使用该定义调用讲师本身。它不需要传递给调用函数。
1赞
Vlad from Moscow
7/31/2022
@SangitaPaul 是的,您需要提供编译器可以生成目标代码的内联函数的函数定义。
评论
inline