好的,我来自vb.net到c ++。我试图在结构中使用向量,但编译器对我大喊大叫。当前的陈述有什么问题?
#include <vector>
struct FactorSet
{
vector<long long> UpperFactor(0);
vector<long long> LowerFactor(0);
};
输出错误(Visual Studio 2008):
错误1错误C2059:语法错误:'常数'
我冒昧地猜测这是我对矢量究竟是什么缺乏了解。在我看来它是一个对象,虽然我认为它的最新名称是模板。像字符串这样的其他对象似乎没有问题。我还假设这也扩展到类定义,因为结构和类是如此相似。
答案 0 :(得分:6)
你想:
#include <vector>
struct FactorSet
{
std::vector<long long> UpperFactor;
std::vector<long long> LowerFactor;
};
虽然你可能也有很长的问题,因为这目前不是C ++的一部分。
如果你真的想给向量一个大小,你需要通过结构构造函数来做到这一点:
struct FactorSet
{
std::vector<long long> UpperFactor;
std::vector<long long> LowerFactor;
FactorSet() : UpperFactor(42), LowerFactor(42) {}
};
现在当你说:
FactorSet f;
f中的向量都将具有42的大小。
关于矢量究竟是什么,它是一个非常类似于字符串的类,除了矢量的情况你必须说它包含什么类型的东西。所以
vector <char> s;
非常相似(但不完全相同):
string s;
答案 1 :(得分:2)
是的,您可以在结构或类中使用向量。问题是在C ++中,你无法初始化内联成员;你需要在构造函数中进行初始化。例如:'
class FactorSet {
public:
FactorSet() : UpperFactor(0), LowerFactor(0) {}
// ...
private:
std::vector<int64_t> UpperFactor;
std::vector<int64_t> LowerFactor;
};
只是一些注释...默认情况下,vector将使用零元素构造,因此不必以这种方式显式构造它(事实上,这样做可能比使用默认构造函数稍慢)。此外,类型long long
目前是非标准的。考虑使用int64_t
中定义的stdint.h
(以及更方便地,在标题boost/cstdint.hpp
中)。