Моя цель состоит в том, чтобы second_func
напечатать для экранирования как параметр размера, так и первый векторный элемент, содержащийся в структуре, переданной ему из p_thread create
.Проблема заключается в печати векторного элемента.У меня есть следующий код:
#include <iostream>
#include <bits/stdc++.h>
#include <pthread.h>
using namespace std;
void first_func(vector<int>& vect);
void * second_func(void * args);
struct t_args {
vector<int> *vect;
int size;
};
int main() {
vector<int> vect;
vect.push_back(100);
first_func(vect);
return 0;
}
void first_func(vector<int>& vect) {
int record;
pthread_t thread;
struct t_args args;
args.vect = &vect;
args.size = 5;
record = pthread_create(&thread, NULL, &second_func, (void *)&args);
if (record) {
cout << "Error - Not able to create thread." << record << endl;
exit(-1);
}
pthread_join(thread, NULL);
}
void * second_func(void * args) {
struct t_args params = *(struct t_args*) args;
cout << "The value of the size param is " << params.size << endl;
cout << "The value of the first element of the vector is " << params.vect[0] << endl;
pthread_exit(NULL);
}
Это вызывает следующую ошибку.
something.cpp: In function ‘void* second_func(void*)’:
something.cpp:38:63: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘std::vector<int>’)
cout << "The value of the first element of the vector is " << params.vect[0]
Полное сообщение об ошибке довольно длинное, но это суть.Программа была скомпилирована с помощью следующей команды:
g++ file.cpp -std=c++11 -lpthread -o file
Я почти уверен, что это проблема, связанная с указателями и правильным синтаксисом разыменования, однако после многих попыток и изменения синтаксиса сохраняется некоторая форма ошибки,