假设我有结构的以下C++定义.
struct Empty {};
struct Tmp : public Empty { int x; };
struct Tmp2 : public Empty { Tmp tmp;};
struct Tmp3 { Tmp tmp; };
Run Code Online (Sandbox Code Playgroud)
的sizeof(Tmp3) == sizeof(Tmp) == 4,这是预期.但是,sizeof(Tmp2) == 8我想不出为什么......?你能解释一下吗?谢谢!
我在mac OSX 10.6机器上有各种版本的python,其中一些安装了macports:
> python_select -l
Available versions:
current none python24 python26 python26-apple python27
Run Code Online (Sandbox Code Playgroud)
默认或系统版本是python26-apple.我现在正在使用我选择的python27
> sudo python_select python27
Run Code Online (Sandbox Code Playgroud)
我最近尝试使用安装django easy_install,但它安装了默认的python(我可以通过python_selecting python26-apple和导入django来检查).相反,如果我下载django tarball,请展开并使用
> sudo python setup.py install
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作,即我在python 2.7中得到django.现在问题是,有没有办法easy_install使用我选择的python版本python_select?
UPDATE显然python_select已弃用.以下命令似乎是等效的:
port select --list python
Run Code Online (Sandbox Code Playgroud)
生产:
Available versions for python:
none
python24
python26
python26-apple
python27 (active)
Run Code Online (Sandbox Code Playgroud) 我使用macports安装了gcc 4.6.前缀是/opt/local,我得到了预期的包含路径:
#include "..." search starts here:
#include <...> search starts here:
/opt/local/include/gcc46/c++/
/opt/local/include/gcc46/c++//x86_64-apple-darwin10
/opt/local/include/gcc46/c++//backward
/opt/local/lib/gcc46/gcc/x86_64-apple-darwin10/4.6.1/include
/opt/local/include
/opt/local/lib/gcc46/gcc/x86_64-apple-darwin10/4.6.1/include-fixed
/usr/include
/System/Library/Frameworks
/Library/Frameworks End of search list.
Run Code Online (Sandbox Code Playgroud)
但是,/opt/local/lib似乎没有在库搜索路径中,所以我必须-L/opt/local/lib在命令行上使用g ++时指定它:
Library search paths:
/opt/local/lib/gcc46/gcc/x86_64-apple-darwin10/4.6.1
/opt/local/lib/gcc46
/usr/lib
/usr/local/lib
Framework search paths:
/Library/Frameworks/
/System/Library/Frameworks/
Run Code Online (Sandbox Code Playgroud)
对于安装了macport的其他库,这是一个问题.有没有一种简单的方法可以添加/opt/local/lib到库搜索路径?我试过设置DYLD_LIBRARY_PATH无济于事.我使用的是Mac OS X 10.6.8.
我有以下结构
struct node{
float val;
int count;
}
Run Code Online (Sandbox Code Playgroud)
我有这个结构的几个对象.现在,我想将这些对象插入到STL的优先级队列中,以便优先级队列按计数对项目进行排序.有关如何这样做的任何想法?优选地,最小堆是优选的.我知道如何对原始数据类型而不是结构进行上述操作
STD的全部特::原子为整数类型提供算术组合赋值运算符,例如+=,-=但没有*=或/=.标准说明了这一点,但据我所知,没有理由给出.熟悉原子操作图书馆部分背后原因的人是否可以对此有所了解?
码:
#include <iostream>
void out()
{
}
template<typename T, typename... Args>
void out(T value, Args... args)
{
std::cout << value;
out(args...);
}
int main()
{
out("12345", " ", 5, "\n"); // OK
out(std::endl); // compilation error
return 0;
}
Run Code Online (Sandbox Code Playgroud)
构建错误:
g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -pthread -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
../main.cpp: In function ‘int main()’:
../main.cpp:17:15: error: no matching function for call to ‘out(<unresolved overloaded function type>)’
../main.cpp:17:15: note: candidates are:
../main.cpp:3:6: note: void out() …Run Code Online (Sandbox Code Playgroud) 我有一个类对象数组,在类对象中我有另一个数组,我需要初始化为全零.代码编译并运行,但我的输出显示的是C而不是0.
从头文件:
class Cache {
private:
int byte[16];
public:
Cache();
int getBytes(int);
~Cache();
};
Run Code Online (Sandbox Code Playgroud)
来自cpp文件
Cache::Cache()
{
byte[16]={0};
}
int Cache::getBytes(int j){
return byte[j];
}
Run Code Online (Sandbox Code Playgroud)
来自其他cpp文件
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++) //visual check of initializes main memory
{
cout << cache[i].getBytes(j) << " ";
}
}
Run Code Online (Sandbox Code Playgroud)
这是否正确设置?正如我所提到的,getBytes按预期返回'C'而不是'0'.
我正在尝试创建一个应该为我的轮盘程序实现一些方法的对象,但是在编译时我得到错误,std :: random_device中没有成员生成
这是一个类示例:
#include <random>
class Engine
{
public:
Engine();
int spin();
private:
std::mt19937 m_generator;
std::uniform_int_distribution<int> m_distribution;
std::random_device m_seed;
};
Engine::Engine() :
m_generator(m_seed),
m_distribution(0, 36)
{
}
int Engine::spin()
{
return m_distribution(m_generator);
}
Run Code Online (Sandbox Code Playgroud)
//现在让我们试一试
Engine eng;
for(int i = 0; i < 20; ++i)
eng.spin();
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
上面的代码打开一个std头文件,代码不容易理解
我还没有看到一个同时使用unique_ptr和move-semantics的pimpl示例.
我想将一个CHelper类添加到STL派生容器中,并使用pimpl来隐藏CHelper所做的事情.
这看起来不错吗?
class CDerived : public set<CSomeSharedPtr>, public CHelper
{
//...
};
Run Code Online (Sandbox Code Playgroud)
`
// derived containers need to support both copy and move, so CHelper does too
class CHelper
{
private:
class impl;
unique_ptr<impl> pimpl;
public:
//--- default: need both cotr & cotr (complete class) in order to use unique_ptr<impl>
CHelper();
~CHelper();
//--- copy
CHelper(const CHelper &src); //copy constructor
CHelper& operator=(const CHelper &src);//assignment operator
//--- move
CHelper(CHelper &&src); //move constructor
CHelper& operator=(CHelper &&src);//move operator
//--- expose public …Run Code Online (Sandbox Code Playgroud) 我在C++中有一个STL映射,其中键是unsigned int,值是一个构造函数为的类:
Foo::Foo(unsigned int integerValue){
//Some stuff
}
Run Code Online (Sandbox Code Playgroud)
在其他类中,我在头部声明了std :: map:
private:
std::map<unsigned int, Foo> *m_mapFoo;
Run Code Online (Sandbox Code Playgroud)
在cpp文件中我创建了它并插入了Foo的实例:
m_mapFoo = new std::map<unsigned int, Foo>;
m_mapFoo->insert(0, new Foo(0));
m_mapFoo->insert(1, new Foo(1));
Run Code Online (Sandbox Code Playgroud)
但是我在插入方法中遇到以下错误:
no matching function for call to ‘std::map<unsigned int, Foo, std::less<unsigned int>, std::allocator<std::pair<const unsigned int, Foo> > >::insert(const unsigned int&, Foo*)’
Run Code Online (Sandbox Code Playgroud)
find方法的类似问题:
m_mapFoo.find(0)->second->someFunctionIntoFooClass();
Run Code Online (Sandbox Code Playgroud)
错误的地方如下:
request for member ‘find’ in ‘((Foo*)this)->Foo::m_mapGeoDataProcess’, which is of non-class type ‘std::map<unsigned int, Foo, std::less<unsigned int>, std::allocator<std::pair<const unsigned int, Foo> > >*’
Run Code Online (Sandbox Code Playgroud)
附加说明:我没有Foo复制构造函数,但我不认为这是问题所在.
有什么帮助理解这个错误?
c++ ×8
c++11 ×4
macos ×2
macports ×2
arrays ×1
atomic ×1
atomicity ×1
constructor ×1
dictionary ×1
g++ ×1
gcc ×1
inheritance ×1
linker ×1
min-heap ×1
python ×1
random ×1
std ×1
stl ×1
struct ×1
unique-ptr ×1