我正在創建一個多線程類方法,需要調用compute
。轉發聲明混亂
void compute(const Me::MyClass<T>& c1, Me:: MyClass<T>& target,std::size_t start);
namespace Me{
template<typename T> class MyClass{
computeMultiThreaded(){
MyClass<T> target = MyClass();
std::size_t n_threads = std::thread::hardware_concurrency();
std::vector<std::tuple<std::size_t, std::size_t>> parts = split_job(n_threads, number_jobs);
std::vector<std::thread> threads;
for (std::size_t ti = 0; ti < n_threads; ti++)
{
// , parts[ti], minCol, this, m2, returnMatrix));
threads.push_back(std::thread(compute,parts[ti]));
}
}
}
}
void compute(const Me::MyClass<T>& c1, Me:: MyClass<T>& target,std::size_t start){
...
}
現在,當我嘗試compute
定義MyClass
後,Me::MyClass
是不是在compute
第一個定義稱爲編譯此。當我刪除第一個聲明時,創建線程時不會知道compute
?
我該如何解決這個問題22?
error: use of undeclared identifier 'Me'
是否 使用Me :: MyClass; 有幫助嗎? – tpdi
這是一個大型項目的簡化示例... –
是的,因爲在聲明它之前使用了'Me'。所以命名空間必須在之前聲明。 – Raindrop7