小编jua*_*nza的帖子

如何从空类继承时解释此sizeof结果

假设我有结构的以下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我想不出为什么......?你能解释一下吗?谢谢!

c++ inheritance struct

13
推荐指数
2
解决办法
485
查看次数

安装了各种版本的python的easy_install,mac osx

我在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)

python macos macports

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

Mac OS X上的gcc:如何链接与MacPorts一起安装的库?

我使用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.

macos linker gcc g++ macports

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

用户定义类型的优先级队列

我有以下结构

struct node{
   float val;
   int count;

}
Run Code Online (Sandbox Code Playgroud)

我有这个结构的几个对象.现在,我想将这些对象插入到STL的优先级队列中,以便优先级队列按计数对项目进行排序.有关如何这样做的任何想法?优选地,最小堆是优选的.我知道如何对原始数据类型而不是结构进行上述操作

c++ priority-queue min-heap

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

为什么std :: atomic <integral>特化不提供乘法和除法赋值运算符?

STD的全部特::原子为整数类型提供算术组合赋值运算符,例如+=,-=但没有*=/=.标准说明了这一点,但据我所知,没有理由给出.熟悉原子操作图书馆部分背后原因的人是否可以对此有所了解?

c++ multithreading atomic atomicity c++11

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

std :: endl和variadic模板

码:

#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++ variadic-templates c++11

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

在构造函数中初始化数组数据成员

我有一个类对象数组,在类对象中我有另一个数组,我需要初始化为全零.代码编译并运行,但我的输出显示的是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'.

c++ arrays constructor

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

生成随机数(没有成员生成存在错误)

我正在尝试创建一个应该为我的轮盘程序实现一些方法的对象,但是在编译时我得到错误,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头文件,代码不容易理解

c++ random c++11

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

这是在C++ 11中实现pimpl wth unique_ptr和move-semantics的正确方法

我还没有看到一个同时使用unique_ptr和move-semantics的pimpl示例.

我想将一个CHelper类添加到STL派生容器中,并使用pimpl来隐藏CHelper所做的事情.

这看起来不错吗?

Derived.h

class CDerived : public set<CSomeSharedPtr>, public CHelper  
{
//...
};
Run Code Online (Sandbox Code Playgroud)

`

Helper.h

// 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++ unique-ptr c++11

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

将类插入STL映射时,"没有匹配的调用函数"错误

我在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++ dictionary stl std

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