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

Поиск:

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


Шустрый
*


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

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



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

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

#pragma once
#include "stdafx.h"
#include<iostream>
#include "stdlib.h"


class myString
{
    int size;
    char *str;
    friend std::ostream& operator<<(std::ostream&, const myString&);
    friend std::istream& operator>>(std::istream&, myString&);
public:
    ~myString(void);
    myString(char*s);
    myString copyStr(myString&,myString&);
    myString addStr(myString&,myString&);
    myString createStr();
    myString searchStr(myString&);
    
};


методы
Код

#include "stdafx.h"
#include "myString.h"
using namespace std;

myString::~myString(void)
{
    delete [] str;
}
myString::myString(char*s)
size=1024
{
    str=new char[size];
    strcpy(str,s);
}

myString myString::copyStr(myString &s1, myString &s2)
{
    s1=s2;
    return s2;
}
myString myString::addStr(myString &s1, myString &s2)
{
    int j=0;
    for(int i=0,i<size-1,i++)
    {
        if(s1[j] != '\0')
        {
            j++;
        }
        else s1[j-1]=s2;
    }
    return s1;
}
myString myString::searchStr(myString &s1)
{
    myString s2;
    for(int i=0,i<size,i++)
    {
        if(s1[i]!=' ')
        {
            i++;
        }
        else (s1[i]==' ' && s1[i-1]!=' ')
            s2=s1[i];
            return s2;
    }

}

std::istream& operator>>(istream &t, myString &s)
{
    if(s.str)
    {
        delete [] s.str;
    }
    char buff[1024];
    t.getline(buff,1024);

    int buff_size=strlen(buff);
    s.str= new char [buff_size+1];
    strcopy(s.str,buff);
    return t;
}

std::ostream& operator<<(ostream &t,const myString &s)
{
    t<<s.str<<std::endl;
}


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


uploading...
****


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

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



dgolukas

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

Это сообщение отредактировал(а) azesmcar - 30.8.2009, 18:47
PM   Вверх
andrew_121
Дата 30.8.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(dgolukas @  30.8.2009,  18:38 Найти цитируемый пост)
myString::myString(char*s)size=1024{    str=new char[size];    strcpy(str,s);}

Это как понимать? Это синтаксическая ошибка.

В общем я не увидел не одного правильно реализованного метода. Да и логика в них не верна. Пиши с нуля.


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


Шустрый
*


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

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



Цитата(azesmcar @ 30.8.2009,  18:47)
dgolukas

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

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

Добавлено @ 20:45
Цитата(andrew_121 @ 30.8.2009,  18:58)
Это как понимать? Это синтаксическая ошибка.

В общем я не увидел не одного правильно реализованного метода. Да и логика в них не верна. Пиши с нуля.

да, он на этом месте и ступорит

спасибо. перепишу все заново

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


uploading...
****


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

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



dgolukas

Цитата(dgolukas @  30.8.2009,  20:44 Найти цитируемый пост)
страуструпа пока не потяну наверно, хотя он один знает как правильно писать на его языке и какие конструкции использовать)

Это знаю очень многие, а некоторые знают получше самого Струструпа.

У тебя чуть ли не в каждой строке ошибка. Не нужно читать Страуструпа, чтобы правильно написать for. 
Цитата

for(int i=0;i<size;i++)

думаю понятно, что комментировать и исправлять этот код просто не имеет смысла.
PM   Вверх
dgolukas
Дата 30.8.2009, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(azesmcar @ 30.8.2009,  21:34)
У тебя чуть ли не в каждой строке ошибка. Не нужно читать Страуструпа, чтобы правильно написать for. 
Цитата

for(int i=0;i<size;i++)

думаю понятно, что комментировать и исправлять этот код просто не имеет смысла.

ой да((( вот это да.. лоханулась с фором.

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


Кодофей
****


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

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



Есть еще std::string если что smile


Это сообщение отредактировал(а) andrew_121 - 30.8.2009, 22:32


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


Шустрый
*


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

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



и здесь..
Цитата

std::ostream& operator<<(ostream &t,const myString &s)
{
    return t<<s.str<<std::endl;
}


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


Кодофей
****


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

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



ISergeyN, Где?


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


Шустрый
*


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

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



Цитата(andrew_121 @  31.8.2009,  20:27 Найти цитируемый пост)
ISergeyN, Где?

в коде автора
Цитата

std::ostream& operator<<(ostream &t,const myString &s)
{
    t<<s.str<<std::endl;
}

отсутствует return

PM MAIL Skype   Вверх
Любитель
Дата 31.8.2009, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(ISergeyN @  31.8.2009,  20:19 Найти цитируемый пост)
ostream &t

[telepate mode on]
Судя по тому, что рядом неймспейс ostream явно квалифицировался - юзинга для std нету. Значит и здесь надо явно указать неймспейс.
[telepate mode off]


--------------------
PM MAIL ICQ Skype   Вверх
andrew_121
Дата 31.8.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



ISergeyN, Ааа... Ну да, я просто в твоем коде смотрел smile 



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Любитель
Дата 31.8.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(ISergeyN @  31.8.2009,  20:34 Найти цитируемый пост)
отсутствует return

У, блин - я тож подумал, что типа "ещё вот тут что-т не работает" smile


--------------------
PM MAIL ICQ Skype   Вверх
andrew_121
Дата 31.8.2009, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Проще переписать с нуля чем править "это" smile 


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


Шустрый
*


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

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



новый код
все равно не работает((

хиддер:
Код

#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&);
    neStr& operator char*() { return neStr; }
    neStr& operator+(const neStr&, 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 operator+(const neStr &str1, const neStr &str2)
{                               
    neStr s;                   
    s.len = str1.len + str2.len;
    s.Str = new char[s.len + 1];  
    strcpy(s.Str, str1.Str);        
    strcat(s.Str, str2.Str);        
    return s;                  
}
void neStr::Sort(neStr s[], int n)
{
    
    bool flag = true;
    newStr 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 MAIL   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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