gpt4 book ai didi

c++ - "Cannot convert parameter from ' [classname](_cdecl *)(void) ' to ' [classname] '"构造对象时出错

转载 作者:太空狗 更新时间:2023-10-29 19:59:14 24 4
gpt4 key购买 nike

注意:我使用的是 Visual Studio 2010。

这里有两个重要的类,日期和目录。

class Date
{
private:
int month, day, year;
public:
Date();
Date(int month, int day, int year);
};

class Directory : public [Superclass]
{
private:
File* fileContents[50];
Directory* dirContents[5];
public:
Directory();
Directory(char* name,
long size,
Date dateCreated,
Date dateModified,
Date dateAccessed,
int attributes);
};

我在更下方定义了构造函数 - Date 构造函数的工作方式与您想象的一样。现在,我真的是 C++ 的新手,所以我什至无法理解收到的错误消息。如果我尝试使用 Directory 的默认构造函数,我会收到此错误消息:

error LNK2019: unresolved external symbol "class Directory __cdecl d(void)" (?d@@YA?AVDirectory@@XZ) referenced in function _main

如果我尝试使用 3 个 Date 对象来实现它,使用以下代码:

int main()
{
Date d1();
Date d2();
Date d3();
Directory d("Hello", 12, d1, d2, d3, 0);
cout << d;
}

这些是我的错误信息:

error C2664: 'Directory::Directory(char *,long,Date,Date,Date,int)' : cannot convert parameter 3 from 'Date (__cdecl *)(void)' to 'Date'

IntelliSense:构造函数“Directory::Directory”的实例与参数列表不匹配

编辑:因此,在不断努力让我觉得零意义的过程中,VS 决定在使用 Date da[3]< 创建三个 Date 参数时正常编译我的程序 构造函数的参数是 ("Hello", 12, d[0], d[1], d[2], 0)

最佳答案

按照标准

An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized.

[Note: since () is not permitted by the syntax for initializer,

X a ();

is not the declaration of an object of class X, but the declaration of a function taking no argument and returning an X. The form () is permitted in certain other initialization contexts (5.3.4, 5.2.3, 12.6.2). —end note ]

因此,您需要按如下方式更改您的声明

int main()
{
Date d1;
Date d2;
Date d3;
Directory d("Hello", 12, d1, d2, d3, 0);
cout << d;
}

关于c++ - "Cannot convert parameter from ' [classname](_cdecl *)(void) ' to ' [classname] '"构造对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14533172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com