结构作为构造函数参数(在 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 argsfirst。它不知道你以后要定义struct args

简单的解决方法是将struct args 的定义移动到Verification.h

修复它,您仍然会遇到其他错误(最明显的是没有定义 A),但当您遇到这些错误时,我们可以处理。

【讨论】:

【参考方案3】:

您的第二个错误是由于字符串文字是const char[],而不是std::string——您需要先创建一个string,然后再将其传递给需要字符串的函数。

另外,gtA 需要在此调用之前定义。

【讨论】:

以上是关于结构作为构造函数参数(在 main 中声明)的主要内容,如果未能解决你的问题,请参考以下文章

拷贝构造函数详解

如何在priority_queue中使用函子作为自定义比较器

拷贝构造函数详解

string碎碎念

golang语言构造函数

构造结构的结构并将其作为函数参数传递的有效方法