小编Ole*_*egG的帖子

错误:'std :: this_thread'尚未声明

我尝试使用std :: this_thread :: sleep_for()函数,但得到了错误
error: 'std::this_thread' has not been declared.
标志_GLIBCXX_USE_NANOSLEEP包括在内.
还需要什么来强迫它发挥作用?
MinGW ==> gcc版本4.7.2(GCC)

SSCCE:

#include<thread>

int main() {
  std::this_thread::sleep_for(std::chrono::seconds(3));
}
Run Code Online (Sandbox Code Playgroud)

命令行:

g++ -D_GLIBCXX_USE_NANOSLEEP -std=gnu++0x ssce.cpp -o ssce.exe
Run Code Online (Sandbox Code Playgroud)

编译结果:

ssce.cpp: In function 'int main()':
ssce.cpp:4:8: error: 'std::this_thread' has not been declared
Run Code Online (Sandbox Code Playgroud)

c++ gcc mingw glibc c++11

11
推荐指数
1
解决办法
2万
查看次数

C++静态const成员覆盖

考虑以下.

struct A {
    static const int X = 1;
    static void printX() {std::cout << "X " << X << std::endl; };
};

struct B: public A {
    static const int X = 2;
};

int main(argc argv){
    B b;
    b.printX();
}
Run Code Online (Sandbox Code Playgroud)

如何强制b.printX()打印值2?
- 常量和方法 - 必须是静态的.因此,虚拟方法并不适用.

对于那些认为自己比我更了解自己的任务并且想要重新思考我的人,我会解释我努力的最终目标:)
想象一下基于静态常量集的行为的类.实现具有不同常量集并因此具有不同行为的子类的最简单方法是使用特定的常量值集从前一个类派生类.可以使用虚拟检查来解决该任务.原因可能,毫无疑问.但是根据建模实体的理论,这个解决方案不是很纯粹.在这种情况下使用虚拟方法将比正确的实现更具窍门.
例如,IR通道具有不同的脉冲持续时间和封装结构的时序.使用一组特定的常量值定义一组子类(不同的IR通道实现)很方便.这些值是静态的,因为它们对于class和const的每个对象都是通用的,因为它们仅在编译时需要.并且因为基类和子类的内部实现略有不同,所以它们之间的最佳关系是super class - child class.
我现在的问题是否合理?

c++ static-members

9
推荐指数
2
解决办法
8853
查看次数

MinGW + Boost:未定义引用`WSAStartup @ 8'

以下是我执行的内容

D:\Just4Fun\software\>make -f Makefile.hands stest
g++.exe -g -D_WIN32_WINNT=0x0601 -ID:\Boost\boost_1_51_0 -LD:\Boost\boost_1_51_0\stage\lib -LD:\MinGW\lib -lboost_system-mgw46-d-1_51 -lboost_filesystem-mgw46-d-1_51 -lboost_iostreams-mgw46-d-1_51 -lws2_32 -lwsock32 -o TestSerial.exe TestSerial.cpp

以下是结果

C:\Users\oleg\AppData\Local\Temp\ccXpC7RG.o: In function 'ZN5boost4asio6detail17winsock_init_base7startupERNS2_4dataEhh': D:/Boost/boost_1_51_0/boost/asio/detail/impl/winsock_init.ipp:39: undefined reference to 'WSAStartup@8'C:\Users\oleg\AppData\Local\Temp\ccXpC7RG.o: In function 'ZN5boost4asio6detail17winsock_init_base7cleanupERNS2_4dataE': D:/Boost/boost_1_51_0/boost/asio/detail/impl/winsock_init.ipp:48: undefined reference to 'WSACleanup@0' collect2: ld returned 1 exit status make: *** [stest] Error 1

下面是检查库提到的symobls的结果(我没有以适当的方式格式化它)

`d:\ MinGW\lib> nm -C libws2_32.a | grep WSAStartup
00000000 T WSAStartup @ 8
00000000 I imp _WSAStartup @ 8

d:\ MinGW\lib> nm -C libws2_32.a | grep WSACleanup
00000000 T WSACleanup @ …

c++ windows mingw wsastartup

8
推荐指数
1
解决办法
1万
查看次数

计算的类型范围

假设我有以下内容

class X {
    typedef some_numeric_type my_type;
}
Run Code Online (Sandbox Code Playgroud)

如何确定限制my_type

c++ types

2
推荐指数
1
解决办法
46
查看次数

析构函数调用之前从未构造过的对象

我有以下代码.

class Wave {

int m_length;
data_type * m_data;

public:

    Wave(){
        blah...blah...blah
        m_data = NULL;
        m_length = 0;
        cout << "Wave " << this << " created on " << m_data << " with m_length " <<  m_length << endl;
    }

    Wave(int len, data_type data){
        blah...blah...blah
        if (len) {
            m_length = len;
            m_data = new data_type [m_length];
        } else {
            m_length = 0;
            m_data = NULL;
        }
        cout << "Wave " << this << " created on " << m_data …
Run Code Online (Sandbox Code Playgroud)

c++ object-destruction

1
推荐指数
1
解决办法
122
查看次数

为什么不能从初始化列表初始化我的类,即使它派生自std :: list?

我有以下代码.

#include <utility>
#include <list>
#include <iostream>

class Pair: public std::pair<unsigned int, unsigned int>{
    Pair (unsigned int h, unsigned int l) : pair(h,l){};
};
class PairList: public std::list<Pair>{};


int main(int argc, char** argv){

    PairList pl = {{800,400},{800,400}};
}
Run Code Online (Sandbox Code Playgroud)

我使用命令行使用MinGW g ++ v4.6编译它
g++ -std=c++0x Test.cpp -o test.exe
并得到错误:
error: could not convert '{{800, 400}, {800, 400}}' from '<brace-enclosed initializer list>' to 'PairList'
但是如果在main()中我写的
list<pair<unsigned int,unsigned int>> pl = {{800,400},{800,400}};
一切正常.
WTF?

c++ initializer-list c++11 list-initialization

1
推荐指数
1
解决办法
186
查看次数

Tcl无法打开串口com22

当我尝试COM22通过USB 打开哪个是串口时,Tcl回答我以下问题:

couldn't open "com22": no such file or directory
Run Code Online (Sandbox Code Playgroud)

另一个程序成功打开该串口.
可能是什么原因?
Tcl 8.5,Windows 7

serial-port tcl

1
推荐指数
1
解决办法
1380
查看次数