Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
polimorf96
9 / 9 / 0
Регистрация: 02.08.2010
Сообщений: 270
#1

Межфайловое взаимодействие vector-ов - C++

02.12.2011, 14:09. Просмотров 442. Ответов 2
Метки нет (Все метки)

Доброго времени суток!
недавно столкнулся с задачей. Есть файлы:
unit1.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "loadFile.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
extern AnsiString nameOfTest;
extern AnsiString textOfTest;
extern int nofQuestions;
 
//////???????????extern vector<question> questions
AnsiString openFile="";   ////открытый файл тестов
 
int currQuest=0; ////номер текущего вопроса
 
/////дальше идут разные определения функций
unit1.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TRichEdit *QuestionEdit;
        TLabel *Label1;
        TCheckBox *Ans1Check;
        TCheckBox *Ans2Check;
        TCheckBox *Ans3Check;
        TCheckBox *Ans4Check;
        TButton *OpenButton;
        TOpenDialog *OpenTestDialog;
        TButton *NextButton;
        void __fastcall ExitButtonClick(TObject *Sender);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall OpenButtonClick(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
(файл unit1.h был сгенерирован автоматически-я в него ничего и не добавлял)
loadfile.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//---------------------------------------------------------------------------
 
#ifndef loadFileH
#define loadFileH
#include <vcl.h>
#include <fstream.h>
#include "question.h"
//------------------------------
const int MAX_NAME_OF_TEST=25; ////максимальная длинна названия теста
const int MAX_TEXT_OF_TEST=1000;///максимальная длинна предисловия к тесту
const int MAX_QUESTIONS=100;
const int MAX_TEXT_OF_QUESTION=100;
const int MAX_TEXT_OF_ANSWER=50;
//---------------------------------------------------------------------------
bool initQuestions(AnsiString pach);     ////загрузить вопросы из файла с путём path  ,возвращает 0 при успехе
 
//---------------------------------------------------------------------------
#endif
loadfile.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//---------------------------------------------------------------------------
 
 
#pragma hdrstop
#include "loadFile.h"
#include <stdlib.h> ////для atoi
#include <vector.h>
 
int nofQuestions=0;       ///кол-во вопросов в файле
AnsiString nameOfTest="";   ////название теста
AnsiString textOfTest="";   ///предисловие к тесту
 
vector<question> questions;
 
 
AnsiString ans[MAX_ANS]={"0"};     ////для создания объектов  вопросов
bool ansb[MAX_ANS]={0};
 
//--------------------------------------------------------------------------
bool initQuestions(AnsiString path)
{
        /////здесь длинная функция.
}
 
//---------------------------------------------------------------------------
 
#pragma package(smart_init)
и ещё несколько -но они не относятся к решению проблемы.
и так:
в файле loadfile.cpp есть определения нескольких переменных
C++
1
2
3
int nofQuestions=0;       ///кол-во вопросов в файле
AnsiString nameOfTest="";   ////название теста
AnsiString textOfTest="";   ///предисловие к тесту
и контейнера:
C++
1
vector<question> questions;
для того чтобы я мог в файле unit1.cpp работать с переменными я объявил их:
C++
1
2
3
extern AnsiString nameOfTest;
extern AnsiString textOfTest;
extern int nofQuestions;
так же мне нужно в этом файле работать с контейнером vector<question> questions
и я написал следующее:
C++
1
extern vector<question> questions
однако когда с записью extern int или extern AnsiString всё нормально(ошибок нет, переменные видны), запись extern vector<question> questions не работает-компилятор выдаёт ошибку Declaratoin syntax error .
Вопрос-как мне сделать так чтобы вектор questions был виден в Unit1 ?
Спасибо за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2011, 14:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Межфайловое взаимодействие vector-ов (C++):

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main - C++
//Vector.h #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;climits&gt; #include &lt;vector&gt; #include &lt;stdlib.h&gt; #include &lt;fstream&gt;...

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) - C++
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b' содержат 2 числа. Стало интересно, как нужно изменить программу...

Ошибка [Linker error] undefined reference to `Vector::Vector(int)' - C++
Добрый день. Делал по методички, и почему-то валятся ошибки... файл lab9_main.cpp #include &lt;iostream&gt; #include &quot;Vector.h&quot; int...

vector<Struct2{int,vector<struct1>}> или множественное наследование ... - C++
Здравствуйте! Помогите, пожалуйста. Есть такие данные: typedef struct { int x; int y; // координаты...

Как корректно скопировать vector в vector внутри класса - C++
Есть класс принимающий в конструкторе vector: class test { test(std::vector&lt;std::string&gt; codeList); ~test(); ...

Указатель на объект вектор в векторе vector < vector<int>* >* - C++
Дело касается вот чего, есть такая вот незатейлевая вещь. #include &lt;vector&gt; #include &lt;iostream&gt; int main( ) { using...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
02.12.2011, 14:33 #2
В каждом файле .cpp
C++
1
2
#include <vector>
using namespace std;
polimorf96
9 / 9 / 0
Регистрация: 02.08.2010
Сообщений: 270
02.12.2011, 15:05  [ТС] #3
и вправду, так работает. Но почему?
ведь файл <vector.h> и так включён в файл unit.cpp(правда косвенно-в файл fileload.h включён vector.h а в unit1-fileload.h . )
Зачем же нужно полуается повторно включать файл vector.h в unit1? или же файл vector.h не включается если он включён в другие файлы?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2011, 15:05
Привет! Вот еще темы с ответами:

Записать числа из файла в двумерный массив или вектор вроде такого vector<vector<int>> - C++
Добрый день, подскажите пожалуйста как лучше и проще считывать файл. в файле записаны числа, разделенные пробелами и запятыми: 1, 2, 3,...

Записать vector<vector<wchar_t>> в текстовый файл - C++
Подскажите пожалуйста, как записать vector&lt;vector&lt;wchar_t&gt;&gt; в файл. Файл необходимо открывать через _wfopen. Пробую так, не получается....

При include<vector> не включает и не видит vector - C++
Не видит vector: //--ClassNeuron.h #ifndef NEURON_H #define NEURON_H #include &lt;cstdlib&gt; #include...

Struct / Vector / Expression: vector subscript out of range - C++
Добрый вечер. Имеется структура: struct Contact { public: string name; vector&lt;string&gt; phoneNumber; };


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru