2013-11-20 3 views
0

я следующая структура объявлена ​​в главных (NEVERMIND членов!):Структура В качестве параметра конструктора (Заявлено в основном)

struct args 
{ 
    std::vector<string> names; 
    std::vector<std::shared_ptr<RegularExpression>>vreg; 
    std::vector<string> stopFile; 
    std::vector<string> groundTruth; 
    int debug; 
}; 

и у меня есть Classe проверка, которая принимает арг как параметр конструктора

#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; 
    } 

У меня есть следующие ошибки компиляции:

  1. Verification.h | 33 | ошибка: 'арг' не называет тип | (эта ошибка для частного члена в классе _A)
  2. main.cpp | 153 | ошибка: нет соответствующей функции для вызова «Проверка»: проверка (const char [7], std :: vector &, double, args &) '|
  3. Verification.h | 24 | error: 'args' не был объявлен | (эта ошибка конструктор)

Как можно использовать структуру, объявленную в главном в качестве параметра конструктора в классе проверке?

спасибо.

+1

Вне темы, но вы не должны использовать [зарезервированные имена] (http://stackoverflow.com/questions/228783), например '_A'. –

+0

О да? И глупо мне, я думал, что делаю все правильно. У меня был inverview с французской компанией, и в их коде они сделали то же самое, что и я. Я даже спросил их. Почему у вас нет конструктора и конструктора копий, это правило большого пальца в C++. Она ответила: NAAAAAAAAAAAAAA нам это не нужно. KILL ME –

ответ

2

Структура должна быть определена таким образом, чтобы она была видна модулю перевода класса проверки. Я предлагаю вам переместить структуру в собственный заголовочный файл и # включить ее в свой основной файл и в Verification.h.

+0

А это звучит неплохо. –

2

Первая ошибка заключается в том, что при компиляции class Verification компилятор должен видеть struct argsfirst. Он не знает, что вы собираетесь определить struct args позже.

Простым исправлением было бы переместить определение struct args в Verification.h.

Исправьте это, и вы все равно будете иметь другие ошибки (наиболее очевидно, что нет определения для A), но мы можем справиться с ними, когда вы доберетесь до них.

1

Ваша вторая ошибка связана с тем, что строковый литерал является const char[], а не std::string - вам нужно создать string перед передачей его функции, ожидающей строку.

Также необходимо определить gt и A перед этим вызовом.

+0

Первый параметр ok Hulk. Я исправил его –

Смежные вопросы