В моем классе у меня есть статический 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.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> ]
Ваш код как таковой не компилируется (Class
должно быть class
, Public
должно быть public
так далее). Что такое сообщение об ошибке? Также вы должны опубликовать простой компилируемый пример, который воспроизводит вашу ошибку. Я предполагаю, что вы не создали экземпляр своей статической переменной за пределами объявления класса, см.
http://www.learncpp.com/cpp-tutorial/811-static-member-variables/
Вы не можете получить ошибку из-за «Public:». Потому что «Public:» — это не ключевое слово, это ярлык. Вот почему «myvariable» по умолчанию закрыт.
Вместо «Public:» используйте «public:», а также замените «Static» на static.
Взгляните на определение —
void otherfunc(CList<int,int> a)
Входной параметр CList<int,int> a
передается по значению, это означает, что при вызове этой функции он будет копировать входной параметр с помощью CList<int,int>
Копировать конструктор.
Но CList<int,int>
не реализует конструктор копирования, а его базовый класс CObject
определите его конструктор копирования как частный.
Вы должны изменить определение на —
void otherfunc(CList<int,int>& a)