Передача переменной CList дает ошибку C2248: 'CObject::CObject': невозможно получить доступ к частному члену

В моем классе я объявил статический 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>        ]

person 230490    schedule 28.11.2014    source источник


Ответы (3)


Ваш код как есть не компилируется (Class должно быть class, Public должно быть public и т. д.). Что такое сообщение об ошибке? Также вы должны опубликовать простой компилируемый пример, который воспроизводит вашу ошибку. Я предполагаю, что вы не создавали свою статическую переменную вне ее объявления класса, см.

http://www.learncpp.com/cpp-tutorial/811-static-member-variables/

person vsoftco    schedule 28.11.2014
comment
@ 230490, пожалуйста, опубликуйте хотя бы полное сообщение об ошибке / код, иначе мы можем только догадываться, что происходит. В вашем фрагменте кода нет частной переменной. - person vsoftco; 28.11.2014
comment
Я создал образец, который можно скопировать в проект, чтобы воспроизвести ошибку, с которой я столкнулся. - person 230490; 28.11.2014
comment
@ 230490 где вы называете otherfunc в своем фрагменте выше? - person vsoftco; 28.11.2014
comment
Внутри myfunc(). Я пропустил, чтобы удалить закомментированную часть - person 230490; 28.11.2014
comment
@ 230490 можно ли CList скопировать? То есть, есть ли у CList конструктор копирования? Если нет, то вы не можете передать значение в otherfunc(Clist<int, int> a) и должны передать CList по ссылке otherfunc(Clist<int, int>& a), так как передача по значению вызывает конструктор копирования. - person vsoftco; 28.11.2014
comment
Ага, только что понял! Огромное спасибо!! - person 230490; 28.11.2014

Вы можете не получить ошибку из-за «Public:». Потому что «Общественность:» — это не ключевое слово, а ярлык. Вот почему «myvariable» по умолчанию является частной. Вместо «Public:» используйте «public:», а также замените «Static» на «static».

person Nihar    schedule 28.11.2014

Взгляните на определение -

void otherfunc(CList<int,int> a)

Входной параметр CList<int,int> a передается по значению, это означает, что при вызове этой функции она скопирует входной параметр с помощью CList<int,int> конструктора копирования.
Но CList<int,int> не реализует конструктор копирования, а его базовый класс CObject определяет его конструктор копирования. как частный.

Вы должны изменить определение на -

void otherfunc(CList<int,int>& a)
person O.Man    schedule 25.07.2016
comment
stackoverflow.com/questions/23210250 / - person O.Man; 25.07.2016