未解析的外部符号“枚举天数__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

提问人:Sangita Paul 提问时间:7/30/2022 最后编辑:Vlad from MoscowSangita Paul 更新时间:7/30/2022 访问量:124

问:

我写了一个小程序,通过给予一天来遇到第二天。

我在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 文件中声明了它。

C++ 定义 未解析外部 内联函数

评论

0赞 WhozCraig 7/30/2022
从这两个位置删除关键字,或将完整的内联运算符移动到标题。inline

答:

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 是的,您需要提供编译器可以生成目标代码的内联函数的函数定义。