[英]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.