Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> класс строки, проверьте пожалуйста код 
:(
    Опции темы
azesmcar
Дата 5.9.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



dgolukas

Признавайтесь, кто писал этот код? Ну не верю я что человек, написавший столько кода не умеет находить ошибки типа variable is not declared. Ничего не изменилось с прошлого раза, опять милион ошибок по синтаксису.
Код

neStr& operator char*() { return neStr; }

Этому оператору возвращаемый тип не нужен, он пишется вот так
Код

operator char*() { ... }

а что у вас в return? Вы класс возвращаете? Ну это ладно, тут скорее всего должно быть Str а не neStr.
а как насчет этого?
Код

newStr temp; //трудно догадаться что тут опечатка? 
neStr temp; //так лучше

вобщем я исправил, компилироваться будет, но я все таки не пойму как можно вот до такого дойти? Вы что пишите 200 строк кода а потом пытаетесь скомпилировать? Нажимайте кнопку компиляции после каждой строки если у вас такие проблемы с синтаксисом языка, ничего позорного тут нет.
Код

#pragma once
#ifndef _NESTR_H_
#define _NESTR_H_
#include "stdafx.h"
#include "stdlib.h"
#include<string.h>
#include <iostream>
using namespace std;
class neStr
{
private:
    char* Str;                 
    int len;               
    friend istream& operator>>(istream&, neStr&);
    friend ostream& operator<<(ostream&, const neStr&);
public:
    neStr();                 
    neStr(const char* s);    
    neStr(const neStr& s);
    ~neStr() { delete [] Str; }
    neStr& operator=(const neStr&);
    operator char*() { return Str; }
    neStr& operator+(const neStr&);
    void Sort(neStr s[], int n);   
    int getlen() { return len; }  
};
#endif


Код

#include "neStr.h"
using namespace std;
neStr::neStr()
{
    Str = NULL;         
    len = 0;
}
neStr::neStr(const char* s)
{
    len = strlen(s);
    Str = new char[len + 1];
    strcpy(Str, s);            
}
neStr::neStr(const neStr& s)
{
    len = s.len;
    Str = new char[len + 1];  
    strcpy(Str, s.Str);
}
neStr& neStr::operator=(const neStr &st)
{                               
    if(this == &st)
        return *this;
    if(len != st.len || len == 0)
    {
        delete [] Str;            
        len = st.len;          
        Str = new char[len + 1]; 
    }
    strcpy(Str, st.Str);          
    return *this;              
}                           
neStr& neStr::operator+(const neStr &str1)
{                               
    neStr s;                   
    s.len = str1.len + this->len;
    s.Str = new char[s.len + 1];  
    strcpy(s.Str, str1.Str);        
    strcat(s.Str, this->Str);        
    return s;                  
}
void neStr::Sort(neStr s[], int n)
{

    bool flag = true;
    neStr temp;
    for(int j = 1; ; j++)    
    {
        for(int i = 0; i < n - j; i++)
            if(strcmp(s[i], s[i + 1]) > 0)
            {                            
                temp = s[i];       
                s[i] = s[i + 1];   
                s[i + 1] = temp;   
                flag = false;
            }
            if(flag)
                break;
            flag = true;
    }
}
std::ostream& operator<<(ostream& os, const neStr& st)
{
    os << st.Str;               
    return os;                  
}
std::istream& operator>>(istream& is, neStr &s)
{
    if(s.Str)
    {
        delete [] s.Str;
    }
    char buff[1024];
    is.getline(buff,1024);
    int buff_size=strlen(buff);
    s.Str= new char [buff_size+1];
    strcpy(s.Str,buff);
    return is;
}


PM   Вверх
dgolukas
Дата 5.9.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



Цитата(azesmcar @ 5.9.2009,  19:44)
Признавайтесь, кто писал этот код? Ну не верю я что человек, написавший столько кода не умеет находить ошибки типа variable is not declared. Ничего не изменилось с прошлого раза, опять милион ошибок по синтаксису.



по поводу кто писал код)
все оч просто. я нашла реализацию класса стринг. почитала, разобралась и написала свою с теми требованиями, что мне задали в школе.

я учу си++ три недели, с ошибками с которыми в классе сталкиваюсь-разбираюсь спокойно, а другие - не всегда могу понять чо хочет от меня компилятор
по поводу neStr и newStr. я сначала создала пустой проект newStr, когда исправляла ошибки, решила подключить "stdafx.h", но он его не видел. проект удалять было жалко, поэтому создала новый, уже не пустой и скопировала в него код из предыдущего, а т.к. класс обозвала не new, а nw просто везде 'е' удалила, а видимо в одном месте забылаsmile

за исправления большое спасибо)))

з.ы. он мне все время пишет одну и ту же фатальную ошибку " fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?"

и не понятно почему, в хиддере он подключен, и в спп, где мейн тоже.(


Это сообщение отредактировал(а) dgolukas - 5.9.2009, 20:34
PM MAIL   Вверх
azesmcar
Дата 5.9.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Отключите Precompiled Header-ы. Это делается вот так

user posted image

Это Visual Studio 2008 (в 2005 тоже самое), не знаю какая у вас версия, но если шестая - там немного иначе, попробуйте найти самостоятельно.
PM   Вверх
dgolukas
Дата 5.9.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 30.8.2009

Репутация: нет
Всего: нет



azesmcar,
спасибо! нашла.

PM MAIL   Вверх
andrew_121
Дата 6.9.2009, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(dgolukas @  5.9.2009,  18:44 Найти цитируемый пост)
#pragma once
#ifndef _NESTR_H_
#define _NESTR_H_

Вы определитесь.
Либо:
Код

#pragma once

Либо:
Код

#ifndef _NESTR_H_
#define _NESTR_H_
...
#endif


Это сообщение отредактировал(а) andrew_121 - 6.9.2009, 00:18


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 6.9.2009, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



andrew_121, одно другому не мешает. Хотя, имхо, лучше классический вариант (#ifdef)

dgolukas, stdafx.h есть смысл подключать не в заголовочном файле, а в файле реализации.
PM   Вверх
andrew_121
Дата 6.9.2009, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(bsa @  6.9.2009,  00:54 Найти цитируемый пост)
одно другому не мешает.

Это понятно.



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 6.9.2009, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(andrew_121 @  6.9.2009,  00:18 Найти цитируемый пост)
Вы определитесь.

http://ru.wikipedia.org/wiki/Pragma_once
Цитата

Можно использовать обе команды #pragma once и include guards для написания переносимого кода, что также может принести выгоду от применения #pragma once при оптимизации (если компилятор ее поддерживает):


но вообще-то Саттер не рекомендует писать что либо перед #ifndef в заголовочном файле, некоторые компиляторы тупо ищут #ifndef в первой строке заголовочного файла. Правда это на мой взгляд слишком уж педантичная подстраховка smile в boost например делают так

Код

#ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED
#define BOOST_CURRENT_FUNCTION_HPP_INCLUDED
// MS compatible compilers support #pragma once
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
...
#endif


Это сообщение отредактировал(а) azesmcar - 6.9.2009, 09:43
PM   Вверх
mes
Дата 6.9.2009, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(azesmcar @  6.9.2009,  08:37 Найти цитируемый пост)
некоторые компиляторы тупо ищут #ifndef в первой строке заголовочного файла.

а если ifndef будет в 10й к примеру строке, то они проигнорируют эту директиву ?!  smile или что то другое, тогда что ?
 smile  


Это сообщение отредактировал(а) mes - 6.9.2009, 11:49


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 6.9.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



mes

Нет, игнорировать конечно не будут smile 
Вот цитата из книги "Стандарты программирования на C++ - Андрей Александреску и Герб Саттер"

user posted image
неохота переписывать
PM   Вверх
mes
Дата 6.9.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(azesmcar @  6.9.2009,  11:16 Найти цитируемый пост)
Нет, игнорировать конечно не будут smile 

ну про код, расположенный до стражей, понятно.. Но вот в чем проявляется малоинтеллектуальность современных препроцессоров, при размещении комментариев до стражей, не понятно..

Судя по цитате автор исходит из того, что если в хидере расположены стражи, то идеологически весь хидер должен быть невключенным, даже если стражи располагаются не вначале.
Конечно если смотреть так, то предупреждение автора выглядит верным, 
ну а также, если в статье они рассматривали не только классические стражи (#ifndef...), но и компиляторозависимые типа #pragma once.

В общем пока писал вроде понял о чем велась речь smile







--------------------
PM MAIL WWW   Вверх
xvr
Дата 7.9.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(mes @ 6.9.2009,  15:51)
Цитата(azesmcar @  6.9.2009,  11:16 Найти цитируемый пост)
Нет, игнорировать конечно не будут smile 

ну про код, расположенный до стражей, понятно.. Но вот в чем проявляется малоинтеллектуальность современных препроцессоров, при размещении комментариев до стражей, не понятно..

Например - gcc распознает конструкцию
Код

#ifndef ...
#define ...
...
#endif
как аналог #pragma once (т.е. он даже не будет читать файл, если встретит второй раз #include с ним в единице трансляции).
Но нет никакой гарантии, что он опознает ту же конструкцию, если до первого #ifdef в файле будет еще что то написано  smile 

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0918 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.