//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 - это правильный синтаксис?
2 ответа
Вы можете использовать обе версии, последняя более подробная.
Компилятор уже знает о пространстве имен Function
и теперь встречает неизвестный ему тип. Итак, он начинает поиск в том же пространстве имен и находит SomeStruct
, все в порядке. Если он не найдет его там, он будет подниматься выше по дереву пространства имен, пока не достигнет глобального пространства имен.
Это называется зависимым от аргументов поиском (ADL) и применяется не только к пространства имен, но и классы.
Вы также можете сделать это:
//Function.cpp
#include "some_path_with_both_headers.h"
namespace SomeNameSpace
{
void Function( SomeStruct smStr )
{
...
}
}
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.