[英]error: function was not declared in this scope
我必须执行这个简单的练习:我有一个缓冲区,我必须将从 input_file.txt 文件中获取的数据插入到该缓冲区中,例如:
1
2
3
4
然后将这些数据读取并插入到read_position
function 的缓冲区中,然后将它们读取并写入到write_position
function 的终端。另外,我必须管理对缓冲区的访问。 这是 buffer.h:
// Buffer.h
#ifndef Buffer_h
#define Buffer_h
#include <queue>
using std::queue;
#include <mutex>
using std::mutex;
#include <condition_variable>
using std::condition_variable;
class Buffer
{
public:
void append(double v);
double take();
private:
queue<double> buffer_;
mutex mutex_;
condition_variable not_empty_;
};
#endif
这是 buffer.cpp:
//Buffer.cpp
#include <iostream>
using std::cout;
using std::endl;
#include <fstream>
using std::ifstream;
#include <string>
using std::string;
#include <mutex>
using std::mutex;
using std::unique_lock;
#include <condition_variable>
using std::condition_variable;
#include "Buffer.h"
void Buffer::append(double shift)
{
unique_lock<mutex> mlock(mutex_);
buffer_.push(shift);
not_empty_.notify_one(); //signalC
}
double Buffer::take()
{
unique_lock<mutex> mlock(mutex_);
while(buffer_.empty())
not_empty_.wait(mlock); //waitC
double posit =buffer_.front();
buffer_.pop();
return posit;
}
void read_position(Buffer buf)
{
ifstream input("input_file.txt");
if(!input.is_open())
{
cout << "Unable to open the input file." << endl;
exit(EXIT_FAILURE);
}
string line;
while (getline (input, line)){
size_t pos = line.find_first_of(" ",0);
double position = stod(line.substr(pos+1,line.size()));
buf.append(position);
}
}
void write_position(Buffer buf)
{
for(int i=0; i<4; i++){
double pos= buf.take();
cout<<pos<<endl;
}
}
这是主要的:
#include <iostream>
using std::cout;
using std::endl;
#include <thread>
using std::thread;
#include "Buffer.h"
Buffer b1;
int main(int argc, char* argv[])
{
thread read{read_position, b1};
thread write{write_position, b1};
read.join();
write.join();
cout << "End of main thread." << endl;
return 0;
}
编译时出现此错误:
main.cpp: In function ‘int main(int, char**)’:
main.cpp:35:17: error: ‘read_position’ was not declared in this scope
35 | thread read{read_position, b1};
| ^~~~~~~~~~~~~
main.cpp:35:34: error: no matching function for call to ‘std::thread::thread(<brace-enclosed initializer list>)’
35 | thread read{read_position, b1};
| ^
In file included from main.cpp:4:
/usr/include/c++/9/thread:144:5: note: candidate: ‘std::thread::thread(std::thread&&)’
144 | thread(thread&& __t) noexcept
| ^~~~~~
/usr/include/c++/9/thread:144:5: note: candidate expects 1 argument, 2 provided
/usr/include/c++/9/thread:117:7: note: candidate: ‘template<class _Callable, class ... _Args, class> std::thread::thread(_Callable&&, _Args&& ...)’
117 | thread(_Callable&& __f, _Args&&... __args)
| ^~~~~~
/usr/include/c++/9/thread:117:7: note: template argument deduction/substitution failed:
/usr/include/c++/9/thread:112:5: note: candidate: ‘std::thread::thread()’
112 | thread() noexcept = default;
| ^~~~~~
函数read_position
和write_position
未声明为对main.cpp
可见。
您应该在Buffer.h
中声明它们,例如:
class Buffer
{
// omit: same as original
};
void read_position(Buffer buf);
void write_position(Buffer buf);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.