내 프로젝트의 다른 위치에서 TaxConstants.hpp 네임 스페이스 TAXCONSTANTS에 선언 된 상수 int SIZE를 사용하려고합니다. 컴파일을 시도 할 때 SIZE가 참조되는 모든 곳에서 'SIZE'에 대한 정의되지 않은 참조를 얻습니다.
TaxConstants.hpp 파일
#ifndef TaxConstants_hpp
#define TaxConstants_hpp
namespace TAXCONSTANTS
{
extern const int SIZE = 4; // I have tried with and without extern
}
#endif //TAXCONSTANTS_HPP
main.cpp
#include <iostream>
#include "TaxConstants.hpp"
using namespace std;
using namespace TAXCONSTANTS;
int main()
{
extern const int SIZE;
// This is a struct defined in another file. It is a sample of my use for SIZE. I left out the #include above to simplify things.
taxPayer payers[SIZE];
//More code
return 0;
}
추가 정보 : 이것은 학교 프로젝트이며 선생님이 TAXCONSTANTS 네임 스페이스의 TaxConstants.hpp 파일에 상수를 선언하도록 요구했습니다.
총 5 개의 파일이 있으며, 내 기능이있는 파일에 SIZE 오류에 대한 정의되지 않은 참조가 동일합니다.
나는 extern 함수와 네임 스페이스에 대한 유사한 설명을 찾는 데 몇 시간을 보냈지 만 대부분의 제안은 처음에는 다른 솔루션을 제공하는 것에 반대합니다. 나는 불행히도 사용할 수 없습니다. 사람들이 가진 다른 오류는 내가 가지고 있지 않은 "다중 장식"을 얻는 것입니다.
더 자세한 내용은 아래 Brians 설명을 참조하십시오.
내가해야 할 일은
const int SIZE = 4;
네임 스페이스 TAXCONSTANTS의 TaxConstants.hpp 파일 내에 있습니다.
그런 다음 'extern const int SIZE;'를 제거하십시오. 내 주 파일에서 대신 크기를 사용하려는 모든 곳에서 TAXCONSTANTS :: SIZE로 SIZE를 참조하십시오.
이것은 내가 완전히 잊은 기본적인 네임 스페이스 항목입니다.
당신이 정의하는 경우 SIZE
없이extern
키워드가 있기 때문에, 그것은 내부 연결을해야합니다 const
. 당신은 그것을 참조 할 수 있습니다 main.cpp
로 TAXCONSTANTS::SIZE
. 컴파일러 SIZE
가 사용되는 모든 곳에서 값을 인라인 할 수 있기 때문에 권장 됩니다.
당신이 정의하는 경우 SIZE
와extern
키워드는 외부 링크를하고 여러 정의 오류를 원하지 않는다면 그것은 헤더에 있으면 안됩니다. 대신 .cpp
프로그램의 나머지 부분에 링크 될 파일에 정의해야합니다 . 이 경우 SIZE
전체 프로그램에 사본이 하나만 있습니다 . 어떤 이유로 든 실제로 전체 프로그램에 하나의 복사본 만 있어야하는 경우가 아니라면 이 방법을 피해야합니다 (대신를 사용 하지 않는 방법을 선호 함 extern
) .SIZE
두 경우 모두 네임 스페이스 SIZE
의 구성원이 TAXCONSTANTS
됩니다.
SIZE
내부 를 재 선언하려는 당신의 시도 main
는 당신이 생각하는대로하지 않습니다! 다음 내부 main
:
extern const int SIZE;
실제로 SIZE
전역 네임 스페이스에서 선언하는 효과가 있습니다. SIZE
전역 네임 스페이스에의 정의가 없기 때문에 링크 타임에 정의되지 않은 참조 오류가 발생합니다. 에 정의 된 변수 를 참조하는 올바른 방법 이 아닙니다 .SIZE
TAXCONSTANTS
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다