错误:'class std :: result_of中没有名为'type'的类型

时间:2016-10-19 06:15:07

标签: c++ multithreading

我知道这类问题已被提出,但我无法弄清楚我得到错误的原因..

我正在尝试使用多个线程测试下面给出的锁实现:

Columns("B:D").EntireColumn.Hidden = False
Columns("I:N").EntireColumn.Hidden = False
Dim r1, r2 As Range
Set r1 = Range("B:D")
Set r2 = Range("I:N")
Range("E4:E").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
ActiveSheet.PageSetup.PaperSize = xlPaperA4
ActiveSheet.PageSetup.Orientation = xlPortrait
ActiveSheet.Range(r1, r2).PrintPreview

我正在使用以下代码为此创建线程:

class TTAS
{
    atomic<bool> state;
public:
    TTAS(){
        state =  ATOMIC_FLAG_INIT;
    }
    void lock() {
        while(true) {
            while(state) {};
            // using exchange() which is equivalent to getAndSet but with lookup
            if (!state.exchange(true)) {
                return;
            }
        }
    }
    void unlock() {
        state.exchange(false);
    }
};

当我编译此代码时,我得到以下错误。我不知道我在这里做错了什么..

void test2(TTAS t) {

}
TTAS t();

for (int i = 0; i < 10; i++) {

    // Create a thread and push it into the thread list and call the distributedWrite function
    threadList.push_back(std::thread(test2, std::ref(t)));
}

有人可以解释一下这个错误。提前致谢

2 个答案:

答案 0 :(得分:4)

您似乎遇到了most vexing parse

TTAS t();

t是一个不带参数的函数,并返回TTAS

优先于传统的 1 语法:

TTAS t{}; // no ambiguity here

您的代码test2还有一个问题是按值获取其参数,但TTAS包含std::atomic<bool>,它既不可复制也不可移动。

1 虽然这有点用词不当,因为它不是那么统一

答案 1 :(得分:3)

TTAS t();是一个函数声明。如果你想要一个默认构造的变量,请将它声明为TTAS t;