声明自动功能导致未定义的错误
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;
所以我尝试对 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;