C++ 将 typedef 保护为 return 值
C++ protected typedef as return value
我不确定这是否可能,但基本上我有这个指针 typedef,它在我的线程之间共享的 class 中受到保护,我想创建一个函数 return是该类型定义的指针。
我可以毫无问题地在我的 .h 中声明该函数,但 .cpp 说它无法识别它。我还可以在函数中使用我的 typedef。正如我所说,我唯一不能做的就是将其作为 return 值。
我怀疑你们甚至都没有看到代码,但我发布它只是为了使其完整。
共享 header:
#pragma once
class CR
{
public:
private:
public:
int c_outPut(std::string &output);
protected:
typedef std::unordered_map<in_addr, SOCKET>::const_iterator cit;
};
另一个.h的简短版本
#pragma once
#include "commonRec.h"
#include <unordered_map>
#include <WinSock2.h>
#include <iterator>
class CH : CR
{
std::string sendToCon(cit &const_it, const std::string &command);
cit findHost(std::string &searchHost);
};
.cpp 函数声明 - 错误 "cit is undeclared identifier"
cit CC::_translateCommand(string &command)
{
}
I can also use my typedef within a function.
这里的关键词是within.
Only thing as i said i can't do is have it as a return value.
您的 return 类型声明超出了函数的范围。在CR
的范围之外,cit
只能引用::cit
。但是你没有定义类型 ::cit
;你定义了 CR::cit
。所以,当你在 CR
的范围之外时,比如当你声明一个成员函数时,你必须显式地解析范围:
CR::cit CC::_translateCommand(string &command)
尾随 return 类型声明在函数的范围内,因此如果您使用它,则不需要显式解析:
auto CC::_translateCommand(string &command) -> cit
我不确定这是否可能,但基本上我有这个指针 typedef,它在我的线程之间共享的 class 中受到保护,我想创建一个函数 return是该类型定义的指针。
我可以毫无问题地在我的 .h 中声明该函数,但 .cpp 说它无法识别它。我还可以在函数中使用我的 typedef。正如我所说,我唯一不能做的就是将其作为 return 值。
我怀疑你们甚至都没有看到代码,但我发布它只是为了使其完整。
共享 header:
#pragma once
class CR
{
public:
private:
public:
int c_outPut(std::string &output);
protected:
typedef std::unordered_map<in_addr, SOCKET>::const_iterator cit;
};
另一个.h的简短版本
#pragma once
#include "commonRec.h"
#include <unordered_map>
#include <WinSock2.h>
#include <iterator>
class CH : CR
{
std::string sendToCon(cit &const_it, const std::string &command);
cit findHost(std::string &searchHost);
};
.cpp 函数声明 - 错误 "cit is undeclared identifier"
cit CC::_translateCommand(string &command)
{
}
I can also use my typedef within a function.
这里的关键词是within.
Only thing as i said i can't do is have it as a return value.
您的 return 类型声明超出了函数的范围。在CR
的范围之外,cit
只能引用::cit
。但是你没有定义类型 ::cit
;你定义了 CR::cit
。所以,当你在 CR
的范围之外时,比如当你声明一个成员函数时,你必须显式地解析范围:
CR::cit CC::_translateCommand(string &command)
尾随 return 类型声明在函数的范围内,因此如果您使用它,则不需要显式解析:
auto CC::_translateCommand(string &command) -> cit