Unresolved External Symbol
От: RealSQUALL Украина  
Дата: 01.07.04 10:46
Оценка:
Компилятор: Microsoft Visual Studio .NET (Framework v1.1)
ОС: Microsoft Windows XP Professional SP1
=========================================================


#define SOME_CONSTANT some_value

class Class1 :
{
    public:
        Class1();
        Class1(Class1 & c);
        Init();
    ...
}

...

class Class2 : public CDialog;
{
    public:
        Class2::Class2(CWnd* pParent = 0);
    private:
        Class1 ar1[SOME_CONSTANT], ar2[SOME_CONSTANT];
        void SomeFunc(Class1 mas1[], const class1 mas2[]);
    ...
}

Class2::Class2(CWnd* pParent = 0)
{
    ar1[DEFINED_INDEX].Init();
    ar1[OTHER_DEFINED_INDEX].Init();
    ...
    SomeFunc(ar2, ar1);
}
...

SomeFunc(ar1, ar2)
{
    ...
}
...



error LNK2019: unresolved external symbol "private: void __thiscall Class2::SomeFunc(class Class1* const, class Class1 const* const)"(?Somefunc@Class2@@AAEXQAVClass1@@QBV2@@Z) referenced in function "public: __thiscall Class2::Class2(class CWnd*)"(??0Class2@@QAE@PAVCWnd@@@Z)

============================================
??
Re: Unresolved External Symbol
От: Кодт Россия  
Дата: 01.07.04 10:50
Оценка:
Здравствуйте, RealSQUALL, Вы писали:

RSQ>
RSQ>class Class2 : public CDialog;
RSQ>{
RSQ>    public:
RSQ>        Class2::Class2(CWnd* pParent = 0);
RSQ>    private:
RSQ>        Class1 ar1[SOME_CONSTANT], ar2[SOME_CONSTANT];
RSQ>        void SomeFunc(Class1 mas1[], const class1 mas2[]);
RSQ>    ...
RSQ>}

RSQ>SomeFunc(ar1, ar2) // Вот это - глобальная функция, а не член класса.
RSQ>{
RSQ>    ...
RSQ>}
RSQ>...
RSQ>
Перекуём баги на фичи!
Re[2]: Unresolved External Symbol
От: Sir Wiz Россия  
Дата: 01.07.04 11:09
Оценка:
Здравствуйте, Кодт, Вы писали:

RSQ>>
RSQ>>SomeFunc(ar1, ar2) // Вот это - глобальная функция, а не член класса.
RSQ>>{
RSQ>>    ...
RSQ>>}
RSQ>>...
RSQ>>

Это даже не функция. Таких зверей в природе С++ вообще не водится.
Где тип возвращаемого значения? Что такое (ar1, ar2)? Типы? Но там притаились фигурные скобочки имплементации, значит должны присутствовать быть имена параметров.
... << RSDN@Home 1.1.3 stable >>
Re[3]: Unresolved External Symbol
От: Vamp Россия  
Дата: 01.07.04 11:37
Оценка:
SW>Это даже не функция. Таких зверей в природе С++ вообще не водится.
SW>Где тип возвращаемого значения? Что такое (ar1, ar2)? Типы? Но там притаились фигурные скобочки имплементации, значит должны присутствовать быть имена параметров.
Не совсем. По первому пункту, далеко не не все компиляторы запрещают функции без указания типа возвращаемого значения.
По второму пункту — иена параметров совершенно необязательны в определении функции, если они не используются.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: Unresolved External Symbol
От: Sir Wiz Россия  
Дата: 01.07.04 12:13
Оценка:
Здравствуйте, Vamp, Вы писали:

SW>>Это даже не функция. Таких зверей в природе С++ вообще не водится.

V>Не совсем.
Угу.

V>По первому пункту, далеко не не все компиляторы запрещают функции без указания типа возвращаемого значения.

Если я правильно понимаю, это прямо запрещено 8.3.5/1 стандарта C++. Однако VC6 даже не ругается, если ставить return c типом int, Intel говорит:

warning #880: omission of explicit type is nonstandard ("int" assumed)

V>По второму пункту — иена параметров совершенно необязательны в определении функции, если они не используются.

Я был просто поражён, но вы действительно правы
... << RSDN@Home 1.1.3 stable >>
Re: Unresolved External Symbol
От: RealSQUALL Украина  
Дата: 01.07.04 20:11
Оценка:
На самом деле было так:
void SomeFunc(Class1 ar1[], const Class1 ar2[])


А ошибку мне указал Кодт: Я действительно сделал объявление функции НЕ принадлежащим к классу...
Re[2]: Unresolved External Symbol
От: RealSQUALL Украина  
Дата: 01.07.04 20:12
Оценка:
Ой! Извините, поблагодарить забыл.

Спасибо что не пожалели на меня времени
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.