在我的类中,我有一个静态Clist variable
,按以下方式声明:
#include<stdio.h>
#include<conio.h>
#include <afxtempl.h>
void otherfunc(CList<int,int> a)
{
}
class A
{
public:
CList<int,int> myvariable;
void myfunc()
{
otherfunc(myvariable);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.myfunc();
getch();
return 0;
}
otherfunc()
不是我班的一部分。
我哪里出错了?我刚刚粘贴了带有问题的代码片段。我已经启动了它,除了我调用 otherfunc() 的行之外,所有工作文件都有效。它不依赖于静态关键字。即使我删除静态,我也会收到相同的错误。
编辑:这是我得到的错误:
C:program files (x86)microsoft visual studio 9.0vcatlmfcincludeafxtempl.h(776) : error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
1> c:program files (x86)microsoft visual studio 9.0vcatlmfcincludeafx.h(561) : see declaration of 'CObject::CObject'
1> c:program files (x86)microsoft visual studio 9.0vcatlmfcincludeafx.h(532) : see declaration of 'CObject'
1> This diagnostic occurred in the compiler generated function 'CList<TYPE,ARG_TYPE>::CList(const CList<TYPE,ARG_TYPE> &)'
1> with
1> [
1> TYPE=int,
1> ARG_TYPE=int
1> ]
你的代码无法编译(Class
应该是class
,Public
应该是public
等)。错误消息是什么?此外,您还必须发布一个简单的可编译示例来重现您的错误。我的猜测是你没有在其类声明之外实例化静态变量,请参阅
http://www.learncpp.com/cpp-tutorial/811-static-member-variables/
由于"公共:",您可能不会收到错误。因为"公共:"不是一个关键词,而是一个标签。这就是为什么"myvariable"默认是私有的。代替"公共:",使用"公共:",并将"静态"替换为静态。
看看 - 的定义
void otherfunc(CList<int,int> a)
输入参数CList<int,int> a
按值传递,这意味着当您调用此函数时,它将使用 CList<int,int>
Copy Constructor 复制输入参数。
但是CList<int,int>
不实现复制构造函数,其基类CObject
将其复制构造函数定义为私有。
您应该将定义更改为 -
void otherfunc(CList<int,int>& a)