结构作为构造函数参数(在 main 中声明)
Posted
技术标签:
【中文标题】结构作为构造函数参数(在 main 中声明)【英文标题】:Structure As constructor parameter (Declared in main) 【发布时间】:2013-11-20 11:55:22 【问题描述】:我在 main (NEVERMIND THE MEMBERS!) 中声明了以下结构:
struct args
std::vector<string> names;
std::vector<std::shared_ptr<RegularExpression>>vreg;
std::vector<string> stopFile;
std::vector<string> groundTruth;
int debug;
;
我有一个类 Verification,它以 args 作为构造函数参数
#ifndef VERIFICATION_H
#define VERIFICATION_H
class Verification
public:
Verification(std::string, std::vector<double>,double,args);
private:
args _A;
#endif // VERIFICATION_H
现在主要:
struct args
std::vector<string> names;
std::vector<std::shared_ptr<RegularExpression>>vreg;
std::vector<string> stopFile;
std::vector<string> groundTruth;
int debug;
;
int main()
Verification v("res.cr",gt, 0.75,A);
return 0;
我有以下编译错误:
-
Verification.h|33|错误:“args”未命名类型| (此错误针对 _A 类中的私有成员)
main.cpp|153|错误:没有匹配函数调用'Verification::Verification(const char [7], std::vector&, double, args&)'|
Verification.h|24|error: 'args' has not been declared|(此错误是构造函数)
如何在类验证中使用main中声明的结构体作为构造函数参数?
谢谢。
【问题讨论】:
离题,但你不应该像_A
那样使用reserved names。
哦,是吗?愚蠢的我,我认为我在做正确的事情哈哈。我与一家法国公司进行了一次访谈,在他们的代码中他们和我做的一样。我什至问他们为什么没有构造函数和复制构造函数,这是 c++ 中的经验法则。她回答说:NAAAAAAAAAAAAAAAA 我们不需要它。杀了我
【参考方案1】:
结构必须以对 Verification 类翻译单元可见的方式定义。我建议您将结构移动到它自己的头文件中,并在您的主文件和 Verification.h 中 #include 。
【讨论】:
【参考方案2】:第一个错误是编译class Verification
时编译器必须看到struct args
first。它不知道你以后要定义struct args
。
简单的解决方法是将struct args
的定义移动到Verification.h
。
修复它,您仍然会遇到其他错误(最明显的是没有定义 A
),但当您遇到这些错误时,我们可以处理。
【讨论】:
【参考方案3】:您的第二个错误是由于字符串文字是const char[]
,而不是std::string
——您需要先创建一个string
,然后再将其传递给需要字符串的函数。
另外,gt
和 A
需要在此调用之前定义。
【讨论】:
以上是关于结构作为构造函数参数(在 main 中声明)的主要内容,如果未能解决你的问题,请参考以下文章