我尝试使用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) 考虑以下.
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.
我现在的问题是否合理?
以下是我执行的内容
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 @ …
假设我有以下内容
class X {
typedef some_numeric_type my_type;
}
Run Code Online (Sandbox Code Playgroud)
如何确定限制my_type?
我有以下代码.
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) 我有以下代码.
#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?
当我尝试COM22通过USB 打开哪个是串口时,Tcl回答我以下问题:
couldn't open "com22": no such file or directory
Run Code Online (Sandbox Code Playgroud)
另一个程序成功打开该串口.
可能是什么原因?
Tcl 8.5,Windows 7
c++ ×6
c++11 ×2
mingw ×2
gcc ×1
glibc ×1
serial-port ×1
tcl ×1
types ×1
windows ×1
wsastartup ×1