//SomeStruct.h
namespace SomeNameSpace
{
    typedef struct SomeStruct
    {
        int SomeVariable;
    } SomeStruct, *PSomeStruct;

}

А также

//Function.h
namespace SomeNameSpace
{
    Function( SomeStruct smStr );
}

Тогда

//Function.cpp
#include "some_path_with_both_headers.h"
void SomeNameSpace::Function( SomeStruct smStr )
{ 
  ...
}

Вместо того

//Function.cpp
#include "some_path_with_both_headers.h"
void SomeNameSpace::Function( SomeNameSpace::SomeStruct smStr )
{ 
  ...
}

Так что параметр является структурой в пространстве имен SomeNameSpace. Первый Function.cpp - это правильный синтаксис?

0
marshal craft 29 Апр 2016 в 10:49

2 ответа

Лучший ответ

Вы можете использовать обе версии, последняя более подробная.

Компилятор уже знает о пространстве имен Function и теперь встречает неизвестный ему тип. Итак, он начинает поиск в том же пространстве имен и находит SomeStruct, все в порядке. Если он не найдет его там, он будет подниматься выше по дереву пространства имен, пока не достигнет глобального пространства имен.

Это называется зависимым от аргументов поиском (ADL) и применяется не только к пространства имен, но и классы.

1
Jan Stephan 29 Апр 2016 в 08:29

Вы также можете сделать это:

//Function.cpp
#include "some_path_with_both_headers.h"
namespace SomeNameSpace
{
    void Function( SomeStruct smStr )
    { 
        ...
    }
}
2
Wurmloch 29 Апр 2016 в 08:17