Я написал программу, которая работает без проблем, но боюсь, что я получаю много предупреждений при компиляции с опцией -Wall (программа написана на C и C ++). На самом деле существует только один тип предупреждений, но он встречается много раз: множественное определение .... (конструкторы, деструкторы и функции). Я думал, что сделал это правильно, но, очевидно, я не прав. У меня 9 файлов:
Server.h
Server.cpp - implements methods declared in Server.h
RankingCreator.h
RankingCreator.cpp - implements methods declared in RankingCreator.h
Parser.h
Parser.cpp - implements methods declared in Parser.h
PageHandler.h
PageHandler.cpp - implements methods declared in PageHandler.h
и
Main.cpp
- все заголовочные файлы включены в этот файл, потому что я использую и объединяю
функциональность всех классов здесь
Каждый файл .cpp, кроме Main.cpp, содержит только один соответствующий файл .h, например, Server.cpp содержит #include "server.h" и не более .h / .cpp файлов, перечисленных выше (но он содержит заголовки как stdio.h и string.h). Я могу опубликовать здесь целое предупреждающее сообщение и код классов, но длина ошибки составляет около 50 строк, а для всех классов будет около 1000 строк, поэтому скажите, действительно ли это необходимо для решения этой проблемы. Есть идеи, как это решить? Должен ли я сделать каждую функцию встроенной или что-то? Каждый заголовочный файл имеет в начале блок #if def.
EDIT:
Вот журнал предупреждений:
g ++ LearnTidyCurl.cpp MyParser.cpp PageHandler.cpp RankingCreator.cpp Server.cpp -lcurl -ltidy -o -Wall Wynik
Вот код одного из моих заголовочных файлов, смотрите путь к ifdefs:
#ifndef RANKINGCREATOR_H_
#define RANKINGCREATOR_H_
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <vector>
#include <algorithm>
//using namespace std;
struct rankingElement {
std::string url;
int rank;
bool operator() (rankingElement i, rankingElement j) { return (i.rank > j.rank);}
} ;
bool operator==(const rankingElement& elem, const std::string& url);
class RankingCreator {
public:
rankingElement compareRankingElements;
const static int MAX_QUERY_RESULT_SIZE = 20;
RankingCreator();
virtual ~RankingCreator();
bool checkPageRank( rankingElement rElement, std::vector<rankingElement> &ranking );
void insertIntoRanking( rankingElement rElement, std::vector<rankingElement>& ranking);
};
#endif /* RANKINGCREATOR_H_ */
Я выбросил предупреждающее сообщение, потому что оно делает эту тему нечитаемой.
Btw. Я использую включенные охранники, автоматически сгенерированные Eclipse - разве они не должны быть в порядке? (При создании нового класса они создаются автоматически)
РЕДАКТИРОВАТЬ:
Вы можете скачать файл gedit с журналом ошибок здесь:
http://www4.zippyshare.com/v/62324366/file.html
Я не хотел публиковать здесь 105-строчную ошибку, кроме того, она в дерьмовом формате, поэтому не очень хорошо выглядит здесь.
Server.h:
#ifndef SERVER_H_
#define SERVER_H_
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <sys/select.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <iostream>
#include <sstream>
#include <vector>
...body...
#endif /* SERVER_H_ */
PageHandler.h
#ifndef PAGEHANDLER_H_
#define PAGEHANDLER_H_
#include <tidy.h>
#include <buffio.h>
#include <stdio.h>
#include <errno.h>
#include <iostream>
#include <string.h>
#include <curl/curl.h>
#include <vector>
#include <algorithm>
#include <stdexcept>
... body ...
#endif /* PAGEHANDLER_H_ */
MyParser.h
#ifndef MYPARSER_H_
#define MYPARSER_H_
#include <vector>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <sstream>
#include <algorithm>
#include <queue>
#include <stdlib.h>
...body...
#endif /* MYPARSER_H_ */
main.cpp
#include <stdio.h>
#include <iostream>
#include <queue>
#include "MyParser.h"
#include "PageHandler.h"
#include "RankingCreator.h"
#include "Server.h"
#define NO_ERROR 0
std::string convertIntToString(int input) {
std::ostringstream ss;
ss << input;
std::string tmpStr = ss.str();
return tmpStr;
}
int main(int argc, char **argv) {
... body ...
return 0;
}
MyParser.cpp
#include "MyParser.h"
PageHandler.cpp
#include "PageHandler.h"
server.cpp
#include "Server.h"
* * RankingCreator.cpp тысяча сорок-девять
#include "RankingCreator.h"