C++ C++;方法签名问题

C++ C++;方法签名问题,c++,methods,C++,Methods,我试图在下面调用addValues: Obj *s = new Obj(); vector<tm> dates(SIZE); vector<double> values[COUNT]; for (uint i = 0; i < COUNT; i++) { values[i] = vector<double>(SIZE); } s->addValues(&dates, &values); // <- this is th

我试图在下面调用addValues:

Obj *s = new Obj();
vector<tm> dates(SIZE);
vector<double> values[COUNT];
for (uint i = 0; i < COUNT; i++) {
    values[i] = vector<double>(SIZE);
}
s->addValues(&dates, &values); // <- this is the error line
Obj*s=newobj();
矢量日期(大小);
向量值[计数];
对于(uint i=0;is->添加值(日期和值);// 这就是我如何重写您的代码以使其可编译:

#include <ctime>
#include <vector>

using namespace std;

typedef unsigned int uint;

#define SIZE 3
#define COUNT 3

struct Obj {
    void addValues(vector<tm> *newDates, vector<double> (*newValues)[COUNT])
    {}
};

int main() {
    Obj *s = new Obj();
    vector<tm> dates(SIZE);
    vector<double> values[COUNT];
    for (uint i = 0; i < COUNT; i++) {
        values[i] = vector<double>(SIZE);
    }
    s->addValues(&dates, &values); 
}
#包括
#包括
使用名称空间std;
typedef无符号整数单元;
#定义尺寸3
#定义计数3
结构对象{
void addValues(vector*newDates,vector(*newValues)[COUNT])
{}
};
int main(){
Obj*s=新的Obj();
矢量日期(大小);
向量值[计数];
对于(uint i=0;iaddValues(日期和值);
}
它编译正确


如您所见,代码与您的代码几乎相同。尝试检查成员函数声明中使用的计数值是否与创建
值时使用的计数值相同,以详细说明此操作的原因-此代码在数组中的元素数上参数化函数,从而允许您接受任意大小的数组,同时保留大小信息。这样,你可以得到两样东西。首先,您将通过值而不是指针传递向量数组,这更合理一些。第二,您再也不必担心大小一致性问题了-编译器将记录使用的空间量。@templatetypedef:如果您想传递数组引用而不是数组指针,则可以不传递这个。数组指针的维度检查与数组引用的维度检查一样。@Fred Nurk-True;我不是故意说不是。我这里所说的“协议”是指,您不必编写只接受一个大小的代码,然后担心在任何地方都使用该特定大小。我的印象是,通过指针传递和通过“&”传递在语义上是相同的。对吗?但这对我来说很有效。有人有链接到一个好的解释吗?*是指针,&是引用。在C++中,我们使用引用的时候大部分是因为我们“引用”到一个实际对象,而不一定是内存块。不确定这是否有意义。不可复制:除了
std::vector
,您还使用了哪些
vector
s?Obj
Stock
的定义是什么?
Obj
是否直接从
股票继承?
no matching function for call to ‘Stock::addValues(std::vector<tm, std::allocator<tm> >*, std::vector<double, std::allocator<double> > (*)[5])’
template <size_t N>
void addValues(vector<tm>* newDates, vector<double> (&newValues)[N]);
template <size_t N>
void addValues(vector<tm>& newDates, vector<double> (&newValues)[N]);
#include <ctime>
#include <vector>

using namespace std;

typedef unsigned int uint;

#define SIZE 3
#define COUNT 3

struct Obj {
    void addValues(vector<tm> *newDates, vector<double> (*newValues)[COUNT])
    {}
};

int main() {
    Obj *s = new Obj();
    vector<tm> dates(SIZE);
    vector<double> values[COUNT];
    for (uint i = 0; i < COUNT; i++) {
        values[i] = vector<double>(SIZE);
    }
    s->addValues(&dates, &values); 
}