Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите с MFC-проектом, не компилируется MFC-проект 
:(
    Опции темы
AntiInt
Дата 15.5.2009, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ситуация такая.Я написал структуру данных-граф,отладил в консоли,работает,ошибок нет,все нормально.Потом делаю визуализация на MFC.Граф представлен шаблонным классом.Когда я подключаю хедер с описанием класс граф и пытаюсь скомпилировать,вылазят ошибки:
------ Build started: Project: kurs2, Configuration: Debug Win32 ------
Compiling...
GenDlg.cpp
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(9) : error C2143: syntax error : missing ';' before '<'
        c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(105) : see reference to class template instantiation 'CEdge<T,T1,T2,T3>' being compiled
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(9) : error C2238: unexpected token(s) preceding ';'
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(10) : error C2143: syntax error : missing ';' before '<'
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(10) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(10) : error C2238: unexpected token(s) preceding ';'
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(16) : error C2059: syntax error : ''
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(16) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(24) : error C2059: syntax error : ''
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(24) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(70) : error C2143: syntax error : missing ';' before '<'
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(70) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(71) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(75) : error C2143: syntax error : missing ';' before '<'
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(75) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(76) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(87) : error C2143: syntax error : missing ';' before '<'
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(87) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\edge.h(88) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\strver.h(9) : error C2143: syntax error : missing ';' before '<'
        c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\strver.h(18) : see reference to class template instantiation 'VerElem<T,T1>' being compiled
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\strver.h(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\андрей валерьевич\мои документы\visual studio 2005\projects\kurs2\kurs2\graph\strver.h(9) : error C2238: unexpected token(s) preceding ';'
почти все ошибки в файле,где описан класс ребра:
#include"Ver.h"
#include<stdio.h>
#ifndef EDGE_H
#define EDGE_H

template<class T,class T1,class T2,class T3>class CEdge//T2-class of weight,T3-class of date
{
private:
    typename CVer<T, T1> *v1;
    typename CVer<T,T1> *v2;
     T2 *weight;
     T3 *date;
    bool isWeight;
public:
    //------------------------------------------------------------------
CEdge(typename CVer<T,T1> *v11,typename CVer<T,T1> *v21,typename T3 *d,bool ww)//ctor
    {
        v1=v11;v2=v21;
        weight=NULL;
        date=d;
        isWeight=ww;
    }
    //------------------------------------------------------------------
    CEdge(typename CVer<T,T1> *v11,typename CVer<T,T1> *v21,typename T2 *vv,typename T3 *d,bool ww)//ctor
    {
        v1=v11;v2=v21;
        weight=vv;
        date=d;
        isWeight=ww;

    }
    //------------------------------------------------------------------- 

    CEdge(const CEdge<T,T1,T2,T3> & anotherEdge)
    {
        v1=anotherEdge.v1;
        v2=anotherEdge.v2;
        weight=anotherEdge.weight;
        date=anotherEdge.date;
        isWeight=anotherEdge.isWeight;
    }
    //-------------------------------------------------------------------
    ~CEdge()
    {
        if(isWeight)delete weight;
        delete date;
    }//dctor
    //-------------------------------------------------------------------
    T2* GetWeight()
    {   if(!isWeight)return NULL;
        return weight;
    }
    //-------------------------------------------------------------------
    bool SetWeight(T2 *cc)
    {  
        if(!isWeight)return false;
        weight=cc;return true;
    }
    //-------------------------------------------------------------------
    T3* GetDate()
    {
        return date;
    }
    //-------------------------------------------------------------------
    void SetDate(T3 *dd)
    {
         date=dd;
    }
    //-------------------------------------------------------------------
typename    CVer<T,T1>* CEdge::V1()//retunr name of outputting ver
    {
        return v1;
    }
    //-------------------------------------------------------------------
    typename CVer<T,T1>* V2()//return name of inputting 
    {
        return v2;
    }
    //------------------------------------------------------------------
    bool isFrom(T nname)//return true if there is edge outputtint from this ver
    {
        if(nname==v1->GetName())return true;
        else return false;
        
    }
    //------------------------------------------------------------------
     typename CVer<T,T1>* other(typename T nname,bool isOr=false)//return name of ver,which is incedented by this edge
    {
           if(!isOr)
           {
               if(nname==(v1->GetName()))
                   return v2;
               if(nname==(v2->GetName()))return v1;
               if((nname!=(v1->GetName()))&&(nname!=v2->GetName()))return NULL;
           }
           if(isOr)
           {
               if(nname==v1->GetName())return v2;
               else return NULL;

           }
           
    }
    //------------------------------------------------------------------
};
#endif
PM MAIL   Вверх
Earnest
Дата 16.5.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



1) Отредактируй свое сообщение, воспользовавшись тэгом "код", чтобы удобнее было читать.
2) Укажи строку, на которой происходит первая ошибка
3) Сначала проверь, компилируется ли вообще твой хеждер в данном контексте. Т.е. закомментируй весь код cpp, оставь только подключение хедера.
4) Не уверена, но скорее всего компилятору не нравится имя СVer
5) Стражи включения лучше ставить до других инклудов (это просто замечание)



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


Шустрый
*


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

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



первая строка,где ошибка-typename CVer<T,T1> *v1,*v2
тут приведен только хедер,он обсолютно нормально работает,когда запускаю консольное приложение с ним.

Добавлено через 51 секунду
Заранее благодарю за внимание к моей проблемеsmile
PM MAIL   Вверх
Earnest
Дата 16.5.2009, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Я еще просила отредактировать свою тему - заключить код в тэги "код".

Стало быть, дело в контексте: если файл нормально компилируется водном проекте и не компилируется в другом.
Для начала выясни в чем разница и какой именно заголовк мешает файлу нормально компилироваться. Ты ведь не привел содержимое ver.h. 
Еще раз повторю: проверь, компилируется ли код, когда edge.h только подключен, но кода в cpp фактически нет (т.е. закомментируй все, кроме инклудов). Шаблоны компилируются не полностью, а только по мере инстационирования, т.е. использования. Если инстационирования нет, компилятор проверет общую структуру кода. Вот и начни с малого.
Потом можно поэтапно комментировать части кода, выясня, что комилятору не нравиться. Скорее всего, имеет место какой-то конфликт.  Или консольный проект отличается от MFC-проекта использованием класса (используются какие-то функции, не используемые в консольном проекте).

Скажем, у меня копия твоего кода прекрасно компилируется в MFC проекте за исключением одной функции V1(), которая просто неправильно написана (нужно убрать квалификатор CEdge:: после чего все нормально).  Но это не гарантирует, что все действительно правильно, т.к. 1) вместо неизвестного мне CVer я вставила пустую затычку 2) нет ни одного инстационирования



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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