Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 3
Регистрация: 02.04.2015
Сообщений: 169

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

14.10.2015, 16:54. Показов 2304. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если у меня есть два конструктора, один из которых по умолчанию, а второй явный. Я почему-то не могу создать экземпляр класса без явного указания членов класса. Прототипы конструкторов:
C++
1
2
    library();
    library(char *title="",char *author="",int year = 1900,int count = 1000);
Определение конструкторов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
library::library()
{
    title_="";
    author_="";
    year_=100;
    pcount_=-1;
}
 
library::library(char *title, char *author, int year, int count)
{
    title_=title;
    author_=author;
    year_=year;
    pcount_=count;
}
Код функции main()
C++
1
2
3
4
5
6
7
8
int main()
{
    library a();
    cout<<"Name: "<<a.getAuthor()<<endl;
    cout<<"Title: "<<a.getTitle()<<endl;
    cout<<"Year: "<<a.getYear()<<endl;
    cout<<"Count "<<a.getpCount()<<endl;
}
Ошибка: request for member 'getAuthor' in 'a', which is of non-class type 'Prog::library'.
Определение класса и реализация его ф-ций на ходятся в (namespace Prog{}) в исходном файле так же указал (using Prog::library
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.10.2015, 16:54
Ответы с готовыми решениями:

Создать экземпляр класса по ссылке экземпляра класса
Есть класс для обработки клиентов // Абстрактный class ClientProcessing { }; Я создаю от него наследника class...

Создать класс CheckerBoard (особенности строения класса - инициализация константных членов класса)
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; const int xSize = 1; const int ySize = 1; class...

Динамический массив без явного указания размера
Самый праздный вопрос, наверное. И, вроде бы, я даже знаю ответ, но все-таки сомневаюсь. В С++ нельзя работать с динамическими...

11
 Аватар для ture
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
14.10.2015, 16:58
C++
1
char *title="",char *author="",int year = 1900,int count = 1000
для всего указаны значения

оба конструктора работают как поумолчанию => неоднозначность
0
1 / 1 / 3
Регистрация: 02.04.2015
Сообщений: 169
14.10.2015, 17:04  [ТС]
То есть если у меня указаны все значения, это тоже конструктор по умолчанию? Я убрал одно значения, все равно не работает, та же самая ошибка
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
14.10.2015, 17:06
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
1
2
3
4
5
6
7
8
int main()
{
    library a();
    cout<<"Name: "<<a.getAuthor()<<endl;
    cout<<"Title: "<<a.getTitle()<<endl;
    cout<<"Year: "<<a.getYear()<<endl;
    cout<<"Count "<<a.getpCount()<<endl;
}
у вас на 3 строке НЕ КОНСТРУКТОР по умолчанию.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
14.10.2015, 17:09
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

1.
Цитата Сообщение от bambique Посмотреть сообщение
library a();
C++
1
library a;
2. У Вас ошибки в копировании строк.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
library::library()
{
    title_=new char[1];
    *title_=0; // пустая строка из 0 символов 
    author_=new char[1];
    *autor_=0;
    year_=100;
    pcount_=-1;
}
 
library::library(char *title, char *author, int year, int count)
{
    title_=new char[strlen(title)+1];
    strcpy(title_,title);
    author_=new char[strlen(autor)+1];
    strcpy(autor_,autor);
    year_=year;
    pcount_=count;
}
1
1 / 1 / 3
Регистрация: 02.04.2015
Сообщений: 169
14.10.2015, 17:09  [ТС]
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
у вас на 3 строке НЕ КОНСТРУКТОР по умолчанию.
Я вызываю явный конструктор, но не передаю аргументы, у меня ведь в прототипе указаны значения, которые будут использоваться если нет входных аргументов.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
14.10.2015, 17:11
Цитата Сообщение от bambique Посмотреть сообщение
То есть если у меня указаны все значения, это тоже конструктор по умолчанию
да
Цитата Сообщение от bambique Посмотреть сообщение
Я убрал одно значения, все равно не работает, та же самая ошибка
как убрал?
нужно вот так
C++
1
library(char *title,char *author="",int year = 1900,int count = 1000);
Цитата Сообщение от bambique Посмотреть сообщение
C++
1
2
3
4
library::library(char *title, char *author, int year, int count)
{
    title_=title;
    author_=author;
не ндравится мне это
тут не строки копируются а указатели, точно этого хотел?
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
14.10.2015, 17:14
Цитата Сообщение от bambique Посмотреть сообщение
Я вызываю явный конструктор
Зачем спорить?)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
class Foo
{
public: 
    Foo()
    {
        cout << "PRIVET KAK DELA" << endl;
    }
};
int main()
{
    Foo a();
}
1
 Аватар для ture
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
14.10.2015, 17:20
rikimaru2013, а что это такое вызывается?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
14.10.2015, 17:21
это объяление прототипа функции которая ничего не принимает и возвращает класс Foo по значению.
1
1 / 1 / 3
Регистрация: 02.04.2015
Сообщений: 169
14.10.2015, 17:40  [ТС]
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
это объяление прототипа функции которая ничего не принимает и возвращает класс Foo по значению.
Я и не спорил, это глупо, пытался донести то, что понимаю. Я "вроде бы" читал, что если я создаю экземпляр класса так:
C++
1
library a;
То вызывается конструктор по умолчанию, если же после следуют круглые скобки, то будет вызываться другой конструктор.

Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
1
library a;
Сработало, спасибо, хоть и не совсем понимаю почему так, что мне нужно сделать чтоб работал вариант: library();?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
14.10.2015, 18:01
Цитата Сообщение от bambique Посмотреть сообщение
что мне нужно сделать чтоб работал вариант: library();
Ничего не сделать, этот синтаксис обозначает
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
объявление прототипа функции которая ничего не принимает и возвращает класс Foo по значению
Запись
Цитата Сообщение от bambique Посмотреть сообщение
C++
1
library a;
полностью соответствует тому, чего ты хочешь добиться.

Добавлено через 8 минут
В С++11 появилась так называемая uniform unitialization, которая снимает эти проблемы неоднозначности синтаксиса.
Т.е. можно делать так:
C++
1
library a{}; // без параметров
так:
C++
1
library a{"title", "author"}; // с параметрами
так:
C++
1
library * pa = new library{};
так:
C++
1
library * pa = new library{"title", "author"};
и т.д. Причем работает и для POD и для классов. Все единообразным синтаксисом.
Чтобы такое компилировалось, нужен компилятор с поддержкой C++11.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2015, 18:01
Помогаю со студенческими работами здесь

Многомерный символьный(строковый) массив без явного указания разрядности
В общем нужно прям в коде создать массив, к примеру: char Mmas=&quot;Первая строка. Вторая строка. Третья строка.&quot;; (тут компилятор...

Создать экземпляр одного класса в Main, и передать его в экземпляр другого класса
Добрый день. Подскажите пожалуйста. есть несколько классов-файлов в одном пакете. class one class two class main... Нужно...

Обратиться к переменной класса без указания самого класса
Вот код: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; ...

Создать экземпляр метода класса или доступ к методу из экземпляра класса
Всем доброго времени суток!) Уже месяца как 2 не сишарпил и подзабыл...собственно задача такая: Создать отдельный экземпляр класса для...

Парсинг сайта без явного указания города
Здравствуйте! Я тут решил парсить сайт technopoint.ru, но не пойму как заставить код понять какой город мне нужен. В адресе явно не указан...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru