小编Kai*_*aan的帖子

编译错误,"使用未定义的结构"

我想向前声明一个struct的部分,所以首先显示"package"结构.我收到"使用undefined struct"的错误,其中"Header"在"Package"中声明.当然,在抛出此错误之前,编译器(VS2010)会扫描头文件中的定义吗?

struct Header;

struct Package
{
    Header header;             <-- "uses undefined struct"

};

struct Header
{
    uint32_t Signature;
    uint8_t MajorVersion;
    uint8_t MinorVersion;
};
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ struct

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

为什么在这种情况下不隐式生成operator =和copy-constructor?

我有这样的结构:

/* Renderable definition */
    struct Renderable
    {
        Renderable(VertexBufferPtr vertexBuffer, const Mat4& wvpMatrix, const Mat4& worldMatrix, const Vec4& diffuseColor, const float specularFactor) : 
                    mVertexBuffer(vertexBuffer), mTransform(wvpMatrix, worldMatrix), mMaterial(diffuseColor, specularFactor)
        {
        }

        /* Transform definition */
        struct Transform
        {
            Transform(const Mat4& wvpMatrix, const Mat4& worldMatrix) : mWVPMatrix(wvpMatrix), mWorldMatrix(worldMatrix)
            {
            }

            const Mat4 mWVPMatrix;
            const Mat4 mWorldMatrix; 
        };

        /* Material definition */
        struct Material
        {
            Material(const Vec4& diffuseColor, const float specularFactor) : mDiffuseColor(diffuseColor), mSpecularFactor(specularFactor)
            {
            }

            const Vec4 mDiffuseColor;
            const float mSpecularFactor;
        }; …
Run Code Online (Sandbox Code Playgroud)

c++ constructor compiler-errors const copy-constructor

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

std :: for_each()和调用构造函数/析构函数

我有问题使用 for_each()在每个元素上和调用构造函数/析构函数时.

作为参考,mBegin指向数组的开头,mEnd超出最后一个元素,mCapacity指向已分配内存的结尾.

template <typename T>
void IDMapTree<T>::Grow()
{
    const size_t prevSize = mCapacity - mBegin;
    const size_t newSize = prevSize != 0 ? static_cast<size_t>(1.5f * prevSize) : 1;
    T* newBuffer = static_cast<T*>(mAllocator.Allocate(newSize));

    // initialize new buffer elements with copy constructor using old elements
    uint32_t itemIndex = 0;
    std::for_each(newBuffer, newBuffer + prevSize, [&](T& item) { item.T(*(mBegin + itemIndex++)); });
    // destruct all old elements
    std::for_each(mBegin, mEnd, [](T& item) { item.~T(); });


    // ... …
Run Code Online (Sandbox Code Playgroud)

c++ stl c++11

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

Variadic模板和复制构造函数

为什么以下不编译:

struct a
{
    int i;
};


template <typename T>
class b
{
public:
    T mItem;


    template <typename... Arguments>
    b(Arguments&&... args) : mItem(std::forward<Arguments>(args)...)
    {
    }
};


int _tmain(int argc, _TCHAR* argv[])
{
    b<a>(1);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误C2664:'a :: a(const a&)':无法将参数1从'int'转换为'const a&'

但只需添加这样的额外参数就可以编译:

struct a
{
    int i;
};


template <typename T>
class b
{
public:
    T mItem;


    template <typename... Arguments>
    // just random extra argument
    b(int, Arguments&&... args) : mItem(std::forward<Arguments>(args)...)
    {
    }
};


int _tmain(int argc, _TCHAR* argv[])
{
    b<a>(1); …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 visual-studio-2013

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