IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> stl vector, multiple definition error., C++\eclipse cdt 3.4.0
Andrewshkovskii
сообщение 16.11.2008 15:00
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


/////

Сообщение отредактировано: Andrewshkovskii - 17.11.2008 16:38
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 16.11.2008 17:58
Сообщение #2


Гость






На самом деле при внимательном рассмотрении твоей программы выясняется, что
1) функция GetFileList написана неправильно: ты вторам параметром передаешь в нее char*, и тут же внутри этой функции обращаешься:
lstrcat(&(argv[1]),"\\*.txt");
, и что, по-твоему, это должно делать? Куда будет записываться результирующая строка? Ты ж весь стек себе испортишь...

2) тебе действительно не нужно extern-переменных... Все проще гораздо. Смотри:

realiz.h
#ifndef __REALIZ_H__
#define __REALIZ_H__

#include <vector>
#include <string>

/*FUNCTIONS PROTOTYPE GOES HERE*/
void GetFileList(int argc, char *argv, std::vector<std::string>& vect);

/*==========================================================*/

#endif /* VARS_H_ */



realiz.cpp
#include <iostream>
#include <windows.h>

#include "realiz.h"
using namespace std;

void GetFileList(int argc, char *argv, std::vector<std::string>& vect)
{
	WIN32_FIND_DATA dFile;
	HANDLE  hFile;
	std::string path;

	if (argc < 2 || argc == 1) {
	    cout << "Not enought parametrs ";
	    exit(0);
    }

    char s[MAX_PATH] = "";
    lstrcpy(s, argv);  path = s;
    lstrcat(s,"\\*.txt");

    path += "\\";
    hFile = FindFirstFile(s, &dFile);
    if (hFile!=INVALID_HANDLE_VALUE) {
        do {
            vect.push_back(path + dFile.cFileName);
        } while (FindNextFile(hFile,&dFile)!=0);
        FindClose(hFile);
    }
}

, и наконец, main.cpp:
#include <iostream>
#include <time.h>

#include "realiz.h"

using namespace std;

int main(int argc, char *argv[])
{
    std::vector<std::string> FileA;
    GetFileList(argc, argv[1], FileA); // передаешь локально описанную переменную по ссылке
    for(unsigned int i = 0; i < FileA.size(); i++)
        cout << FileA[i] << endl;
    return 0;
}



Все работает...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Andrewshkovskii   stl vector, multiple definition error.   16.11.2008 15:00
volvo   Проблема не в STL совсем... А в том, что в твоём п...   16.11.2008 15:26
Andrewshkovskii   а можно как-нибудь обойтись без extern переменной,...   16.11.2008 15:51
volvo   Нет... Для успешной сборки проекта переменная долж...   16.11.2008 16:22
Andrewshkovskii   Получается так, что мне надо в main.cpp и в realiz...   16.11.2008 16:30
volvo   Зачем описывать его еще и в main.CPP? Ты ж подключ...   16.11.2008 16:38
Andrewshkovskii   Ну теперь то понятно, но всё равно, не работает.. ...   16.11.2008 16:48
volvo   На самом деле при внимательном рассмотрении твоей ...   16.11.2008 17:58
Andrewshkovskii   что, спасибо за советы. Но я опять к вас с вопроса...   17.11.2008 16:38
volvo   Потому, что ты описать-то Strings описал, но памят...   17.11.2008 18:23
Andrewshkovskii   Доброго времени суток всем! Особенно volvo, по...   23.11.2008 19:23
volvo   Открывай файл для дозаписи, как положено: ofstrea...   23.11.2008 21:42
Andrewshkovskii   Блин..какой же я не внимательный..в цикле одно и т...   23.11.2008 22:09


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 25.07.2025 3:07
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"