声明自动功能导致未定义的错误

Declaring an Auto Function is causing an undefined error

所以我尝试对 Reader 文件使用自动函数,当我在它自己的 .cpp 文件和 .h 文件中声明它时,我收到错误:

'Reader': a function that returns 'auto' cannot be used before it is defined

但该函数在声明 main 函数的 .cpp 文件中运行完美。

Reader.cpp

auto Reader(std::string Location, int Value)
{
    //Code - I removed the code for simplicity sake
    return 1;
}

Reader.h

auto Reader(std::string Location, int Value);

在主函数中是这样调用的:

    int Renderer = Reader("Engine.Setup", Test);

你得到这个错误是因为,在编译 main.cpp 时,编译器无法在 reader.cpp 中看到 Reader() 的推断 return 类型,所以它不知道是什么是的。

解决方案:显式声明 Reader() 的 return 类型。

这是一个假设 main.cpp

#include <string>
#include <Reader.h>

int main ()
{
    int Renderer = Reader("Engine.Setup", Test);
}

预处理器处理 include 语句后,它看起来像

// contents of string. Goes on for miles so I won't reproduce it here.
auto Reader(std::string Location, int Value);

int main ()
{
    int Renderer = Reader("Engine.Setup", Test);
}

此文件中没有任何地方是 return 类型的 Reader 明确的,所以你必须给它一个提示。 Reader.cpp知道return是什么类型,因为它可以从函数的定义中推断出来,但是Reader.cpp是不同的Translation Unit,会单独编译。 Main.cpp完全不知道有人知道return类型,main.cpp不知道的,编译器也不知道,报错

阻力最小的途径是明确说明

int Reader(std::string Location, int Value);

在 Reader.h。您还可以提供尾随 return 类型的提示。

auto Reader(std::string Location, int Value)-> int;