Как внутри одного класса создать экземпляр другого класса?

Компьютеры программирование программы windows С++

Приложение Windows Forms, MS Visual Studio 2008
Допустим есть некие классы А и В.
В классе А есть процедура, которая должна создать экземпляр класса В и вернуть ссылку на этот экземпляр.
При создании экземпляра класса В вылетают ошибки, что у класса В нет конструктора по умолчанию, хотя он есть и конструкторов несколько.
А если передать параметры, подходящие для другого конструктора, то вылезет ошибка, что класс В не имеет конструкторов вовсе, хотя IDE подсказывает параметры для конструктора.

Примечание:
В том-то и дело, что у класса В вообще нет private методов, все public

Примечание:
заголовочный файл первого класса:
#pragma once
class myTreeNode;
#include "myEnums.cpp"
using namespace System;

ref class myTree
{

private:
String ^source;
myTreeNode *root;

myTreeNode* CreateSubTree(String ^s);
public:
myTree(void);
myTree(String ^s);
};

Описания:
#include "StdAfx.h"
#include "myTree.h"
class myTreeNode;
myTreeNode* myTree::CreateSubTree(System::String ^s)
{
myTreeNode *n = new myTreeNode(); // вот эта строка и вызывает ошибку, что нет подходящего конструктора по умолчанию
// если сделать myTreeNode *n = new myTreeNode(1) - воспользоваться интовым конструктором, то вылетит ошибка, что конструкторов нет вовсе, хотя visual stduio даже параметры подсказывает для конструктора
}
myTree::myTree(void)
{
this->source = "";
this->root = nullptr;
}
myTree::myTree(String ^s)
{
s = deleteSpaces(s);
s = s->ToLower();
this->source = s;
this->root = this->CreateSubTree(s);
}

myTreeNode.h:
#pragma once
#include "myEnums.cpp"
using namespace System;

public class myTreeNode
{

private:
double data;
NODE_TYPE dataType;
int dataId;
myTreeNode *left;
myTreeNode *right;

public:
myTreeNode();
myTreeNode(int a);
myTreeNode(NODE_TYPE dataType, int dataId, double data, myTreeNode *left, myTreeNode *right);
};

myTreeNode.cpp:
#include "StdAfx.h"
#include "myTreeNode.h"

myTreeNode::myTreeNode()
{
this->data = 0;
this->dataId = 0;
this->dataType = NODE_TYPE_EMPTY;
this->left = nullptr;
this->right = nullptr;
}
myTreeNode::myTreeNode(int a)
{
this->data = a;
this->dataId = 0;
this->dataType = NODE_TYPE_EMPTY;
this->left = nullptr;
this->right = nullptr;
}
myTreeNode::myTreeNode(NODE_TYPE dataType, int dataId, double data, myTreeNode *left, myTreeNode *right)
{
this->dataType = dataType;
this->dataId = dataId;
this->data = data;
this->left = left;
this->right = right;
}
Ответы:
Ты не забыл конструкторы класса B пометить public'ом?
Код - в студию. Телепаты по домам пошли, рабочий день у них закончился.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.