在我的课堂上,我通过以下方式声明了静态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()的行之外,一切都工作。它不依赖于static关键字。即使我删除静态,我也会得到同样的错误。
编辑:这是我得到的错误:
C:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxtempl.h(776) : error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(561) : see declaration of 'CObject::CObject'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afx.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> ]
答案 0 :(得分:0)
您的代码不会编译(Class
应为class
,Public
应为public
等。什么是错误消息?此外,您必须发布一个简单的可编译示例来重现您的错误。我的猜测是你没有在类声明之外实例化你的静态变量,参见
http://www.learncpp.com/cpp-tutorial/811-static-member-variables/
答案 1 :(得分:0)
由于&#34; Public:&#34;您可能无法收到错误。因为&#34; Public:&#34;这不是一个关键词,它是一个标签。这就是为什么&#34; myvariable&#34;默认情况下是私有的。 而不是&#34; Public:&#34;使用&#34; public:&#34;并取代&#34;静电&#34;与静电。
答案 2 :(得分:0)
看一下 -
的定义void otherfunc(CList<int,int> a)
输入参数CList<int,int> a
按值传递,这意味着当您调用此函数时,它将使用CList<int,int>
复制构造函数复制输入参数。
但CList<int,int>
未实现复制构造函数,其基类CObject
将其复制构造函数定义为私有。
您应该将定义更改为 -
void otherfunc(CList<int,int>& a)