我想向前声明一个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)
谢谢
我有这样的结构:
/* 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) 我有问题使用 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) 为什么以下不编译:
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)