Форум программистов, компьютерный форум CyberForum.ru

valarray, наследование - C++

Восстановить пароль Регистрация
 
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
21.06.2013, 18:39     valarray, наследование #1
Файл использующий объекты:
123.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include "dma.h"
#include <cstdlib>
 
int main(void)
{
using std::cin;
using std::cout;
using std::endl;
 
cout << "Enter name of wine: ";
char lab[50];
cin.getline(lab, 50);
cout << "Enter number of years: ";
int yrs;
cin >> yrs;
Wine holding(lab, yrs);
 
   system("PAUSE"); 
   return 0;
}
Определения классов dma.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "dma.h"
#include <cstring>
Pair::Pair()
{
    year(0);
    bottles(0);
}
 
Pair::Pair(int & yr, int & bot)
{
    year(yr);
    bottles(bot);
}
 
Pair::Pair(int & yr)
{
    year(yr);
}
 
Wine::Wine(char * lab, int & yr) :Pair(yr)
{
    for(int i=0; lab[i] != '/0'; i++)
    {
        name[i] = lab[i];
    };
}
Объявление классов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <valarray>
using namespace std;
class Pair
{
private:    
    typedef valarray<int> year;
    typedef valarray<int> bottles;
public:
 
    Pair();
    Pair(int & yr, int & bot);
    Pair(int & yr);
};
 
class Wine : public Pair
{
private:
    string name;
public:
    Wine(char * lab, int & yr);
}
А это отчет об компиляции, непонимаю где я пытался преобразовать Wine в int или наоборот:
dma.cpp
1>c:\users\андрей\documents\visual studio 2010\projects\123\dma.cpp(4): error C2533: Pair::{ctor}: конструкторы не разрешены для возвращаемого типа
1>c:\users\андрей\documents\visual studio 2010\projects\123\dma.cpp(11): error C2082: переопределение формального параметра "yr"
1>c:\users\андрей\documents\visual studio 2010\projects\123\dma.cpp(12): error C2082: переопределение формального параметра "bot"
1>c:\users\андрей\documents\visual studio 2010\projects\123\dma.cpp(17): error C2082: переопределение формального параметра "yr"
1> 123.cpp
1>c:\users\андрей\documents\visual studio 2010\projects\123\123.cpp(7): error C2628: недопустимый "Wine" с последующим "int" (возможно, отсутствует ";")
1>c:\users\андрей\documents\visual studio 2010\projects\123\123.cpp(8): error C3874: возвращаемый тип "main" должен быть "int", а не "Wine"
1>c:\users\андрей\documents\visual studio 2010\projects\123\123.cpp(31): error C2664: Wine::Wine(const Wine &): невозможно преобразовать параметр 1 из "int" в "const Wine &"
1> Причина: невозможно преобразовать "int" в "const Wine"
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно

1> Создание кода...
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:02.00
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Добавлено через 2 минуты
Честно говоря очень сложно изучать ООП, может кто-то подскажет хороший ресурс где хорошо разжевано?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2013, 18:39     valarray, наследование
Посмотрите здесь:

C++ Непонятное поведение std::valarray
C++ Наследование
работа с шаблонным классом valarray C++
C++ Библиотека valarray
C++ valarray
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
21.06.2013, 18:46     valarray, наследование #2
Цитата Сообщение от faradej Посмотреть сообщение
class Wine : public Pair
{
private:
* * string name;
public:
* * Wine(char * lab, int & yr);
}
; не поставили в конце

А инклюд гварды кто за вас добавлять будет?
Цитата Сообщение от faradej Посмотреть сообщение
for(int i=0; lab[i] != '/0'; i++)
* * {
* * * * name[i] = lab[i];
* * };
что за чушь, да еще и с ; лишней на конце. Где-то убавилось - где-то прибавилось...

Добавлено через 36 секунд
Цитата Сообщение от faradej Посмотреть сообщение
using namespace std;
за такое в хедерах бьют по рукам. Вы обрекаете весь проект на свалку всех функций в стандартное пространство имен.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.06.2013, 18:47     valarray, наследование #3
Цитата Сообщение от faradej Посмотреть сообщение
lab[i] != '/0'
Здесь точно ошибка есть.
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
21.06.2013, 20:32  [ТС]     valarray, наследование #4
Цитата Сообщение от MrGluck Посмотреть сообщение
Сообщение от faradej
class Wine : public Pair
{
private:
* * string name;
public:
* * Wine(char * lab, int & yr);
}
; не поставили в конце
А инклюд гварды кто за вас добавлять будет?
Спасибо, это помогло остались ошибки:
1>c:\users\андрей\documents\visual studio 2010\projects\123\dma.cpp(11): error C2082: переопределение формального параметра "yr"
1>c:\users\андрей\documents\visual studio 2010\projects\123\dma.cpp(12): error C2082: переопределение формального параметра "bot"
1>c:\users\андрей\documents\visual studio 2010\projects\123\dma.cpp(17): error C2082: переопределение формального параметра "yr"

Цитата Сообщение от go Посмотреть сообщение
Сообщение от faradej
lab[i] != '/0'
Здесь точно ошибка есть.
Это мини-функция по копированию из указателя на char в string, так удобней мне, чем пользоваться библиотечной, она не все делает что я захочу. Конкретно lab[i] != '/0', это проверка на конец строки, или что-то не так?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
21.06.2013, 20:40     valarray, наследование #5
@faradej, ну во-первых нуль-терминированный символ это \0, а во-вторых, конструктор string сделает ту же работу, даже лучше.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.06.2013, 22:01     valarray, наследование #6
Цитата Сообщение от faradej Посмотреть сообщение
'/0'
Вы думаете, что это один символ? http://ru.wikipedia.org/wiki/%D0%9D%...BE%D0%BA%D0%B0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2013, 10:37     valarray, наследование
Еще ссылки по теме:

valarray and complex C++
C++ Valarray, индекс максимального элемента
Инициализация valarray в классе C++

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

Или воспользуйтесь поиском по форуму:
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
22.06.2013, 10:37  [ТС]     valarray, наследование #7
Ну я уже делал так раньше, слеш не в ту сторону поставил это мой протуп да, а что с этим:
error C2082: переопределение формального параметра "yr"
error C2082: переопределение формального параметра "bot"
error C2082: переопределение формального параметра "yr"


Добавлено через 33 минуты
В общем понял в чем моя ошибка была, я хотел присваивать инициализировать тип а не переменную .
Но вот с этой проблемой копирования чара в стринг я сталкивался часто и решал ее разными циклами, но наверно есть способ попроще:
error C2664: strcpy: невозможно преобразовать параметр 1 из "std::string" в "char *"

C++
1
2
3
4
5
Wine::Wine(char * lab, int & yrs)
{
    year= yrs;
    strcpy(name, lab);
}
Добавлено через 59 минут
В общем уже неактуально , всем спасибо.
Yandex
Объявления
22.06.2013, 10:37     valarray, наследование
Ответ Создать тему
Опции темы

Текущее время: 00:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru