Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/47: Рейтинг темы: голосов - 47, средняя оценка - 4.77
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152

Как записать в вектор структуру? Это вообще возможно сделать?

27.03.2015, 01:39. Показов 9638. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!
Как записать в вектор структуру? Это вообще возможно сделать?
Надо, чтоб первая строка из файла записывалась в вектор, данные типа char разделены ";" (CSV файл), сколько столбцов будет неизвестно, поэтому выбрал вектор, длинна данных в строке тоже разная, поэтому выбрал string. Так показалось проще и рациональнее, чем делать динамические массивы. Возможно, я запутался с синтаксисом, подскажите...
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
#include <iostream>
#include <fstream>
#include <ostream>
#include <vector>
#include <string> 
using namespace std;
struct elementsOfTheFirstLine
{
    string title;//для записи заголовков столбцов 
};
vector<elementsOfTheFirstLine> theFirstLineInFile;//в этот вектор нужно записать заголовки столбцов
string currentFileName;
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    currentFileName = "d:\\Temp\\test_08.12.2014.csv";
 
    int i = 0;
    char buf[27];
 
    ifstream f(currentFileName, ios::in);
    while (!f.eof())
    {
        f.getline(buf, 27, ';');
        //theFirstLineInFile.title.push_back(buf); Как тут записать buf в vector в поле структуры title?
        i = i + 1;
        cout << i << ' ' << buf << endl;
    }
    f.close();
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2015, 01:39
Ответы с готовыми решениями:

как можно сделать это? если вообще возможно (не задача)
есть задача, на двумерный массив... вывел массив 5х5 с рандомными числами, нужно найти числа локального минимума, т.е. чтоб число было...

Как своими руками сделать лабораторный бп из обычного компьютерного бп? Это возможно вообще?
хочу для проверки сделать себе блок питания лабораторный . подскажите мне есть ли у кого уже такой ???

Как найти правильные числа. И возможно ли это вообще?
Дано такое условие a &gt; b b &gt; c a &lt; c Какие простые числа подходят для выполнение такого условия? Как вообще такое решить, и...

37
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
07.04.2015, 03:06  [ТС]
Студворк — интернет-сервис помощи студентам
Не могу понять, если пишу в программе просто
s(buf);
тогда подчёркивает s
и ошибки:
3 IntelliSense: call of an object of a class type without appropriate operator() or conversion functions to pointer-to-function type d:\Temp\InVector\InVector\InVector\Sourc e.cpp 37 2 InVector
Error 1 error C2064: term does not evaluate to a function taking 1 arguments d:\temp\invector\invector\invector\sourc e.cpp 37 1 InVector

а если:
stringstream s(buf);
то :
Error 1 error C2374: 's' : redefinition; multiple initialization d:\temp\invector\invector\invector\sourc e.cpp 37 1 InVector
Error 2 error C1903: unable to recover from previous error(s); stopping compilation d:\temp\invector\invector\invector\sourc e.cpp 38 1 InVector

что может быть не так?
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
07.04.2015, 03:12
Цитата Сообщение от russian_pepper Посмотреть сообщение
Не могу понять, если пишу в программе просто
s(buf);
C++
1
s << buf;
Добавлено через 1 минуту
Цитата Сообщение от russian_pepper Посмотреть сообщение
Не могу до конца понять работу со строковым потоком.
Так же, как с файловым.
0
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
07.04.2015, 03:49  [ТС]
Вот если так делаю, где ошибка? ничего не попадает в getline в 38 строке как первый раз в 24-й...
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <fstream>
#include <ostream>
#include <vector>
#include <string> 
#include <sstream>
using namespace std;
 
vector<string> theFirstLineInFile;//в этот вектор нужно записать заголовки столбцов
string currentFileName;
vector<string> ServerTime;
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    currentFileName = "d:\\Temp\\ГАЗПРОМ ао_08.12.2014.csv";
 
    ifstream f(currentFileName, ios::in);
    string buf;
    getline(f, buf); // читаем первую строку в файле
    cout << buf << endl;
    stringstream s(buf); // помещаем её в строковый поток
    int i = 0;
    while (getline(s, buf, ';')) // читаем из строкового потока строки, разделённые ';'
    {
        theFirstLineInFile.push_back(buf); // помещаем их в вектор
        cout << i  << ' ' << theFirstLineInFile[i] << endl;
        ++i;
    }
 
    getline(f, buf); // читаем вторую строку в файле
    cout << buf << endl;
//  stringstream s2(buf); // помещаем её в строковый поток
    i = 0;
    int ii = 0;//для перебора элементов в векторе theFirstLineInFile
    s.clear();
    s << buf;
    while (getline(s, buf, ';')) // читаем из строкового потока строки, разделённые ';'
        //  while (getline(f, buf, ';'))
    {
        if (theFirstLineInFile[ii] == "ServerTime")
        {
            //запись в свой вектор и так все... если нет заголовка в theFirstLineInFile, считать значение в поток и никуда не записывать
            cout << i << ' ' << ii << ' ' << ServerTime.size() << ' ' << buf << endl;
            ServerTime.push_back(buf);
        }
        i++;
        ii++;
        if (ii > (theFirstLineInFile.size() - 2))
        {
            ii = 0;
        }
    }
    f.close();
}
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
07.04.2015, 04:03
C++
1
2
s.clear();
s.str("");
0
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
07.04.2015, 04:22  [ТС]
Так действительно до цикла доходит, в цикле один раз выполняется и всё, я думал, что
while (getline(s, buf, ';'))
будет работать пока строки в файле не закончатся, но так не получается. Что тут ещё не так может быть?
Вот кусок файла моего:

ServerTime;SP;PR;SpPr;AV_INDICATOR_PLUS;AV_INDICATOR_MINUS;INDICATOR;CN;average_CN;average_CN2;V_SEC;VolumeAverage;+-;V_DayPlus;V_DayMinus;V_DayPlusIndefinite;V_DayMinusIndefinite;V_Day;V_DayIndefinite;CN_Open;CN_Close;SUM_INDICATOR;WAPRICE;TIMESEC;CONNECTIONTIME;CONDITION;BLOCK;ASSETS;SPREAD_1;SPREAD_2;SPREAD_3;SPREAD_4;SPREAD_5;MiddlePraiceInSpredLtvel_1;MiddlePraiceInSpredLtvel_2;MiddlePraiceInSpredLtvel_3;MiddlePraiceInSpredLtvel_4;MiddlePraiceInSpredLtvel_5;LOTSIZE;SEC_PRICE_STEP;STEPPRICET;STEPPRICE;SC;SUM_INDICATOR_PLUS;SUM_INDICATOR_MINUS;LenFile;n;MyProfit;StockExchangeFee;BrokerageFee;IOplusSI;INDICATOR_OPEN
10:00:09;102972;154835;0.66504343;0;0;0;141.3;141.244;14.1244;0;614030;+;931705.7857;0;0;0;931705.7857;0;0;0;0;141.34;36009;0:01:40;CASH;Begin;139033.8;16;18;21;23;27;141.34;141.34;141.345;141.345;141.335;10;0.01;0;0;56;0;0;1;4;5;0.01;0.0354;0;0
10:00:31;106824;158164;0.67540022;0.53033333;0;1.591;141.34;141.266;16.9512;23649.31818;195050;+;955355.1039;0;0;0;955355.1039;0;0;0;1.591;141.34;36031;0:02:06;CASH;Begin;139113.8;5;7;10;12;17;141.365;141.365;141.37;141.37;141.365;10;0.01;0;0;57;1.591;0;2;4;5;0.01;0.0354;1.591;0
10:00:33;106824;158164;0.67540022;0.39775;0;0;141.37;141.294;19.7786;70693.5;187513;+;1026048.604;0;0;0;1026048.604;0;0;0;1.591;141.34;36033;0:02:08;CASH;Begin;139173.8;4;7;11;16;20;141.38;141.385;141.375;141.36;141.35;10;0.01;0;0;58;1.591;0;3;4;5;0.01;0.0354;1.591;0
10:00:35;107486;159076;0.67568961;0.3268;0;0.043;141.36;141.32;22.6058;6362;177162;-;1026048.604;-6362;0;0;1019686.604;0;0;0;1.634;141.34;36035;0:02:10;CASH;Begin;139153.8;2;4;7;11;17;141.38;141.38;141.385;141.375;141.365;10;0.01;0;0;59;1.634;0;4;4;5;0.01;0.0354;1.634;0
10:00:40;108879;158587;0.68655691;0.5395;0;1.603;141.41;141.356;25.434;604704.2;230605;+;1630752.804;-6362;0;0;1624390.804;0;0;0;3.237;141.37;36040;0:02:12;CASH;Begin;139253.8;8;10;13;17;19;141.32;141.32;141.325;141.335;141.335;10;0.01;0;0;60;3.237;0;5;4;5;0.01;0.0354;3.237;0
10:01:41;114868;165338;0.69474652;0.64014286;0;1.244;141.02;141.3;28.2544;531179.623;412140;-;1630752.804;-537541.623;0;0;1093211.181;0;0;0;4.481;141.11;36101;0:02:43;CASH;Begin;138473.8;2;7;11;15;17;141.05;141.035;141.045;141.055;141.055;10;0.01;0;0;61;4.481;0;6;4;5;0.01;0.0354;4.481;0
10:01:48;114498;164895;0.69436914;0.560125;-0.00675;-0.054;141.06;141.244;31.0756;10277.14286;386093;+;1641029.947;-537541.623;0;0;1103488.324;0;0;0;4.427;141.11;36108;0:03:22;CASH;Begin;138553.8;7;11;14;19;21;141.155;141.165;141.16;141.145;141.145;10;0.01;0;0;62;4.481;-0.054;7;4;5;0.01;0.0354;4.427;0
10:01:49;114498;164895;0.69436914;0.49788889;-0.006;0;141.11;141.192;33.8978;86066;383341;+;1727095.947;-537541.623;0;0;1189554.324;0;0;0;4.427;141.11;36109;0:03:24;CASH;Begin;138653.8;7;9;11;13;15;141.145;141.145;141.145;141.145;141.145;10;0.01;0;0;63;4.481;-0.054;8;4;5;0.01;0.0354;4.427;0
10:01:50;115195;165179;0.69739495;0.4918;-0.0054;0.437;141.18;141.156;36.7214;494010;384347;+;2221105.947;-537541.623;0;0;1683564.324;0;0;0;4.864;141.11;36110;0:03:25;CASH;Begin;138793.8;7;11;16;18;20;141.085;141.095;141.09;141.09;141.09;10;0.01;0;0;64;4.918;-0.054;9;4;5;0.01;0.0354;4.864;0
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
07.04.2015, 04:28
Цитата Сообщение от russian_pepper Посмотреть сообщение
я думал, что
while (getline(s, buf, ';'))
будет работать пока строки в файле не закончатся,
С чего бы это, если в строковый поток помещается одна строка? У тебя ещё одного цикла не хватает: чтения строк из файла, после чтения первой строки.
1
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
07.04.2015, 06:18  [ТС]
Спасибо!
Разобрался, доделал. Дальше, я должен сделать все данные в векторы по столбцам, как ServerTime. Первый раз затеял серьёзную вещь не смотря на уровень моих знаний, буду признателен Вам за любые замечания относительно моего подхода к этой задаче...

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <fstream>
#include <ostream>
#include <vector>
#include <string> 
#include <sstream>
using namespace std;
 
vector<string> theFirstLineInFile;//в этот вектор нужно записать заголовки столбцов
string currentFileName;
vector<string> ServerTime;
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    currentFileName = "d:\\Temp\\ГАЗПРОМ ао_08.12.2014.csv";
 
    ifstream f(currentFileName, ios::in);
    string buf;
    getline(f, buf); // читаем первую строку в файле
    cout << buf << endl;
    stringstream s(buf); // помещаем её в строковый поток
    int i = 0;
    while (getline(s, buf, ';')) // читаем из строкового потока строки, разделённые ';'
    {
        theFirstLineInFile.push_back(buf); // помещаем их в вектор
//      cout << i << ' ' << theFirstLineInFile[i] << endl;
        ++i;
    }
 
    while (!f.eof())
    {
        getline(f, buf); // читаем остальные строки из файла
    //  cout << buf << endl;
        i = 0;
        int ii = 0;//для перебора элементов в векторе theFirstLineInFile
        s.clear();
        s.str("");
        s << buf;
        while (getline(s, buf, ';')) // читаем из строкового потока строки, разделённые ';'
        {
            if (theFirstLineInFile[ii] == "ServerTime")
            {
                //запись в свой вектор и так все... если нет заголовка в theFirstLineInFile, считать значение в поток и никуда не записывать
                cout << i << ' ' << ii << ' ' << ServerTime.size() << ' ' << buf << endl;
                ServerTime.push_back(buf);
                break;
            }
            i++;
            ii++;
            if (ii > (theFirstLineInFile.size() - 2))
            {
                ii = 0;
            }
        }
    }
    f.close();
}
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
07.04.2015, 06:24
Цитата Сообщение от russian_pepper Посмотреть сообщение
while (!f.eof())
* * {
* * * * getline(f, buf); // читаем остальные строки из файла
Чтобы не было лишнего пустого чтения, всегда так делай:
C++
1
2
while (getline(f, buf))
{
0
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
07.04.2015, 17:19  [ТС]
lss,
Можете чуть подробнее объяснить?
Как я понимаю, while (!f.eof()), будет читать пока файл не закончится, все символы будут считываться.
Предложенный Вами вариант
while (getline(f, buf))
должен читать из файла передавать в getline пока в файле всё не закончится, не могу понять преимущества...
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
07.04.2015, 19:43
Цитата Сообщение от russian_pepper Посмотреть сообщение
while (!f.eof()),
При таком варианте, проверка на eof не там, где чтение (33) строка. В 33 считывается eof, и что происходит? А ничего, код в цикле продолжается, как ни в чём не бывало. Это нужно? Если сделать проверку на eof после 33 строки, то код будет неправильно работать, если в конце последней стрроки нет '\n': считает последнюю строку, сразу с eof, и выйдёт из цикла, не обработав последнее чтение. Предложенный мной вариант, будет корректно работать в любом случае (есть '\n', в конце последней строки, или нет), потому что здесь проверяется не eof, а fail.
1
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
21.04.2015, 23:15  [ТС]
lss,
Здравствуйте!
Можете подсказать, как правильно убрать всё в функцию, чтобы в функцию передавать только имя файла currentFileName, а функция из файлов считывала значения в векторы? В учебниках простые примеры понятны, а в своей задаче ошибку найти не могу. Так как делаю, не работает...
То, что не работает так и закомментировал в программе "это не работает"
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <fstream>
#include <ostream>
#include <vector>
#include <string> 
#include <sstream>
using namespace std;
 
vector<string> theFirstLineInFile;//в этот вектор нужно записать заголовки столбцов
string currentFileName;
 
void readFromFiles(string currentFileName);
 
vector<string> ServerTime;
vector<string> SP;
vector<string> PR;
vector<string> INDICATOR;
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    currentFileName = "d:\\Temp\\ГАЗПРОМ ао_08.12.2014.csv";
 
    //  void readFromFiles(string currentFileName) это не работает
    //{ это не работает
    ifstream f(currentFileName, ios::in);
    string buf;
    getline(f, buf); // читаем первую строку в файле
    stringstream s(buf); // помещаем её в строковый поток
    int i = 0;
    while (getline(s, buf, ';')) // читаем из строкового потока строки, разделённые ';'
    {
        theFirstLineInFile.push_back(buf); // помещаем их в вектор
        i++;
    }
 
    while (getline(f, buf))
    {
        i = 0;
        s.clear();
        s.str("");
        s << buf;
        while (getline(s, buf, ';')) // читаем из строкового потока строки, разделённые ';'
        {
 
            if (theFirstLineInFile[i] == "ServerTime")
            {
                //запись в свой вектор и так все... если нет заголовка в theFirstLineInFile, считать значение в поток и никуда не записывать
                ServerTime.push_back(buf);
            }
 
            if (theFirstLineInFile[i] == "SP")
            {
                SP.push_back(buf);
            }
 
            if (theFirstLineInFile[i] == "PR")
            {
                PR.push_back(buf);
            }
 
            if (theFirstLineInFile[i] == "INDICATOR")
            {
                INDICATOR.push_back(buf);
            }
 
            if (i == (theFirstLineInFile.size() - 1))
            {
                i = 0;
                cout << endl;
            }
            cout << i << ' ' << theFirstLineInFile[i] << ' ' << buf << endl;
            i++;
        }
    }
    f.close();
    //} это не работает
    system("pause");
}
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 23:33
Как-то так:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <fstream>
#include <ostream>
#include <vector>
#include <string> 
#include <sstream>
using namespace std;
 
vector<string> theFirstLineInFile;//в этот вектор нужно записать заголовки столбцов
string currentFileName;
 
void readFromFiles(string currentFileName);
 
vector<string> ServerTime;
vector<string> SP;
vector<string> PR;
vector<string> INDICATOR;
 
void readFromFiles(string currentFileName) 
{ 
    ifstream f(currentFileName, ios::in);
    string buf;
    getline(f, buf); // читаем первую строку в файле
    stringstream s(buf); // помещаем её в строковый поток
    int i = 0;
    while (getline(s, buf, ';')) // читаем из строкового потока строки, разделённые ';'
    {
        theFirstLineInFile.push_back(buf); // помещаем их в вектор
        i++;
    }
 
    while (getline(f, buf))
    {
        i = 0;
        s.clear();
        s.str("");
        s << buf;
        while (getline(s, buf, ';')) // читаем из строкового потока строки, разделённые ';'
        {
 
            if (theFirstLineInFile[i] == "ServerTime")
            {
                //запись в свой вектор и так все... если нет заголовка в theFirstLineInFile, считать значение в поток и никуда не записывать
                ServerTime.push_back(buf);
            }
 
            if (theFirstLineInFile[i] == "SP")
            {
                SP.push_back(buf);
            }
 
            if (theFirstLineInFile[i] == "PR")
            {
                PR.push_back(buf);
            }
 
            if (theFirstLineInFile[i] == "INDICATOR")
            {
                INDICATOR.push_back(buf);
            }
 
            if (i == (theFirstLineInFile.size() - 1))
            {
                i = 0;
                cout << endl;
            }
            cout << i << ' ' << theFirstLineInFile[i] << ' ' << buf << endl;
            i++;
        }
    }
    f.close();
} 
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    currentFileName = "d:\\Temp\\ГАЗПРОМ ао_08.12.2014.csv";
    
    readFromFiles(currentFileName);
 
    system("pause");
}
1
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
26.04.2015, 22:12  [ТС]
lss, Здравствуйте!
Попробовал, разбить программу, которую Вы подсказали как сделать на разные модули как в видеоуроках и книгах и не получается. Что я не так делаю, можете подсказать?
Несколько похожих ошибок выдаётся. Я так понял, что что-то где-то уже определено, а что и где не пойму...

Error 1 error LNK2005: "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > theFirstLineInFile" (?theFirstLineInFile@@3V?$vector@V?$basi c_string@DU?$char_traits@D@std@@V?$alloc ator@D@2@@std@@V?$allocator@V?$basic_str ing@DU?$char_traits@D@std@@V?$allocator@ D@2@@std@@@2@@std@@A) already defined in myFunctions.obj D:\Temp\multi\ConsoleApplication1\Consol eApplication1\Source.obj ConsoleApplication1

Source.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
#include <ostream>
#include <vector>
#include <string> 
#include <sstream>
using namespace std;
 
#include "Header.h"
 
void readFromFiles(string currentFileName);
 
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    currentFileName = "d:\\Temp\\ГАЗПРОМ ао_08.12.2014.csv";
 
    readFromFiles(currentFileName);
 
    system("pause");
}
myFunctions.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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <fstream>
#include <ostream>
#include <vector>
#include <string> 
#include <sstream>
using namespace std;
 
#include "Header.h"
 
void readFromFiles(string currentFileName)
{
    ifstream f(currentFileName, ios::in);
    string buf;
    getline(f, buf); // читаем первую строку в файле
    stringstream s(buf); // помещаем её в строковый поток
    int i = 0;
    while (getline(s, buf, ';')) // читаем из строкового потока строки, разделённые ';'
    {
        theFirstLineInFile.push_back(buf); // помещаем их в вектор
        i++;
    }
 
    while (getline(f, buf))
    {
        i = 0;
        s.clear();
        s.str("");
        s << buf;
        while (getline(s, buf, ';')) // читаем из строкового потока строки, разделённые ';'
        {
 
            if (theFirstLineInFile[i] == "ServerTime")
            {
                //запись в свой вектор и так все... если нет заголовка в theFirstLineInFile, считать значение в поток и никуда не записывать
                ServerTime.push_back(buf);
            }
 
            if (theFirstLineInFile[i] == "SP")
            {
                SP.push_back(buf);
            }
 
            if (theFirstLineInFile[i] == "PR")
            {
                PR.push_back(buf);
            }
 
            if (theFirstLineInFile[i] == "INDICATOR")
            {
                INDICATOR.push_back(buf);
            }
 
            if (i == (theFirstLineInFile.size() - 1))
            {
                i = 0;
                cout << endl;
            }
            cout << i << ' ' << theFirstLineInFile[i] << ' ' << buf << endl;
            i++;
        }
    }
    f.close();
}
Header.h
C++
1
2
3
4
5
6
7
8
9
vector<string> theFirstLineInFile;//в этот вектор нужно записать заголовки столбцов
string currentFileName;
 
void readFromFiles(string currentFileName);
 
vector<string> ServerTime;
vector<string> SP;
vector<string> PR;
vector<string> INDICATOR;
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
26.04.2015, 22:37
Цитата Сообщение от russian_pepper Посмотреть сообщение
Header.h
Не нужно здесь объявлять переменные (векторы, строку), это является и их определением, а оно должно быть одно в коде.

Добавлено через 4 минуты
Header.h
C++
1
2
3
4
5
6
7
8
9
extern vector<string> theFirstLineInFile;//в этот вектор нужно записать заголовки столбцов
extern string currentFileName;
 
void readFromFiles(string currentFileName);
 
extern vector<string> ServerTime;
extern vector<string> SP;
extern vector<string> PR;
extern vector<string> INDICATOR;
А определения (тоже самое, но без extern) сделать где-нибудь в .cpp.
0
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
26.04.2015, 23:38  [ТС]
lss,
Дело в том, что всё перестаёт работать когда я функцию убираю в myFunctions.cpp
Пока функция находится вместе с main() в одном файле, а Header.h, такой как я указал, то всё работает.
Не нужно здесь объявлять переменные (векторы, строку), это является и их определением, а оно должно быть одно в коде.
У меня это определение и так было один раз в коде, только в Header.h, если я переношу всё это в myFunctions.cpp, то тоже не работает и предложенный Вами вариант, тоже выдаёт ошибки, куда бы я не вписал его. Первый раз пытаюсь программу разделить на разные модули, помогите....
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
26.04.2015, 23:45
Цитата Сообщение от russian_pepper Посмотреть сообщение
У меня это определение и так было один раз в коде, только в Header.h
Который ты подключаешь к двум .cpp: Source.cpp и myFunctions.cpp. Сколько одинаковых определений становится в коде?

Добавлено через 53 секунды
Цитата Сообщение от russian_pepper Посмотреть сообщение
Дело в том, что всё перестаёт работать когда я функцию убираю в myFunctions.cpp
Перестаёт работать или перестаёт компилироваться?

Добавлено через 2 минуты
Цитата Сообщение от russian_pepper Посмотреть сообщение
и предложенный Вами вариант, тоже выдаёт ошибки, куда бы я не вписал его.
Хотелось бы этот код увидеть.
1
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 152
27.04.2015, 13:31  [ТС]
lss, Спасибо, заработало!

Добавлено через 13 часов 36 минут
lss, Здравствуйте!
Ещё один вопрос общего характера. Как правильно поступить в относительно несложной программе, если, например, будет всего 10 – 20 функций. Все определения делать в один h файл, а все объявления в cpp файл, или для каждой функции делают свои h файл и cpp файл?
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
27.04.2015, 15:32
Цитата Сообщение от russian_pepper Посмотреть сообщение
Все определения делать в один h файл, а все объявления в cpp файл,
Наоборот: все объявления (прототипы функций, объявления глобальных переменных с extern) - в один .h, а все определения (реализации функций, определения глобальных переменных) - в один .cpp.
И нужно продуманно относиться к использованию глобальных переменных. В твоём коде без них можно спокойно обойтись, а в .h оставить один прототип функции, да и то необязательно, потому что она используется только в одном файле, поэтому достаточно просто там прототип прописать.
В общем, нужно смотреть на конкретную программу и думать, чтобы лишнего не было.

Добавлено через 1 час 30 минут
У Лафоре, в "ООП в С++", есть глава: "Многофайловые программы".
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2015, 15:32

Нужно расшифровать, если это вообще как-то возможно
yadi.sk/i/7/3/100000,(big)9/1/010,9/5/1000000,(big)7/5/100,_,7/3/100000,(big)1/3/00100000000,9/5/1000000,2/4/000100,(big)2/3/000100,6/1/0000...

Кто может это переработать для андроида? И вообще это возможно?
програма на CLI (windows form)

Как указать счетчику с какого номера продолжать считать записи и возможно ли это вообще ?
Существует некая таблица 'Журнал учета счетов-фактур' с набором записей, каждая запись (строка) была пронумерована поле '№ СЧ-фактуры',...

Как загрузить файл формата .PLT в C++ И возможно ли это вообще, что бы с++ запускал программу?
Для начала пишу программу, что бы она мне создала точки для будущго графика использую при этом 2 функции, при этом еще ищу тройную...

как вообще это сделать?
проверить можно ли в пятеричную запись числа х вставить цифру 4 так чтобы оно стало степенью 2?


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru