Russian Qt Forum

Программирование => С/C++ => Тема начата: 8Observer8 от Октябрь 15, 2014, 11:10



Название: warning: 'Database::m_fileName' will be initialized after
Отправлено: 8Observer8 от Октябрь 15, 2014, 11:10
Привет!

Если компилятор предупреждает, значит что-то здесь не так и это можно исправить. Вроде бы ничего плохого в том, что я объявил переменные, а в конструкторе их инициализировал. Как исправить, чтобы не было предупреждений?

Цитировать
Database.h:17: warning: 'Database::m_fileName' will be initialized after [-Wreorder]
     std::string m_fileName;
                     ^

Цитировать
Database.h:16: warning:   'std::vector<std::basic_string<char> > Database::m_columnNames' [-Wreorder]
     std::vector<std::string> m_columnNames;
                                         ^

Цитировать
Database.cpp:4: warning:   when initialized here [-Wreorder]
 Database::Database(const std::string fileName,
 ^

Database.h
Код
C++ (Qt)
#ifndef DATABASE_H
#define DATABASE_H
 
#include <vector>
#include <string>
 
class Database
{
public:
   Database( const std::string fileName,
             const std::vector<std::string> &columnNames );
 
   void addRow( const std::vector<std::string> &row );
 
private:
   std::vector<std::string> m_columnNames;
   std::string m_fileName;
};
 
#endif // DATABASE_H
 

Database.cpp
Код
C++ (Qt)
 
#include "Database.h"
 
Database::Database(const std::string fileName,
                  const std::vector<std::string> &columnNames ) :
   m_fileName( fileName ),
   m_columnNames( columnNames )
{
 
}
 
void Database::addRow( const std::vector<std::string> &row )
{
 
}
 


Название: Re: warning: 'Database::m_fileName' will be initialized after
Отправлено: kramer от Октябрь 15, 2014, 11:27
У вас инициализаторы в конструкторе перечислены не в том порядке, что в объявлении класса. Поменяйте их местами, и ворнинг пропадет.


Название: [Решено] Re: warning: 'Database::m_fileName' will be initialized after
Отправлено: 8Observer8 от Октябрь 15, 2014, 12:09
kramer, спасибо большое!


Название: Re: warning: 'Database::m_fileName' will be initialized after
Отправлено: __Heaven__ от Январь 26, 2015, 12:09
Тоже только что впервые с этим столкнулся в чужом коде.
Меня заинтересовал смысл ругательств. Вот ответ:
Код
C++ (Qt)
struct A {
   int i;
   int j;
   A() : j(0), i(j) { }
};
Чему равен i - не определено.


Название: Re: warning: 'Database::m_fileName' will be initialized after
Отправлено: torwig от Январь 26, 2015, 20:22
Нестатические члены класса инициализируются в порядке их объявления.