Thread overview | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
October 19, 2014 "Error: Undefined identifier" when moving import to another module | ||||
---|---|---|---|---|
| ||||
Hi guys, when I do the following: module myMain; import example; import std.traits; import my.static.library.binding; static this() { foreach ( m; __traits(allMembers, example) ) { static if ( isCallable!(mixing(m) ) { // ... do something here } } } void main() { /* do something here */ } And my example-module looks like: module example; void exmapleFunction() { // do something here } I can compile my application without any error, BUT when I move the import of "my.static.library.binding" to the example-module: module example; import my.static.library.binding; void exmapleFunction() { // do something here } ... I'm getting many error messages like these: myMain.d-mixin-11(11): Error: undefined identifier _D12TypeInfo_xAa6__initZ myMain.d-mixin-11(11): Error: undefined identifier _D49TypeInfo_xAS3std8typecons16__T5TupleTkTkTkZ5Tuple6__initZ myMain.d-mixin-11(11): Error: undefined identifier _D75TypeInfo_xAS3std3uni38__T13InversionListTS3std3uni8GcPolicyZ13InversionList6__initZ myMain.d-mixin-11(11): Error: undefined identifier _D55TypeInfo_xAE3std5regex15__T6ParserTAyaZ6Parser8Operator6__initZ myMain.d-mixin-11(11): Error: undefined identifier _D31TypeInfo_xAS3std5regex8Bytecode6__initZ myMain.d-mixin-11(11): Error: undefined identifier _D110TypeInfo_xAS3std3uni152__T4TrieTS3std3uni20__T9BitPackedTbVmi1Z9BitPackedTwVmi1114112TS3std3uni23__T9sliceBitsVmi8Vmi21Z9sliceBitsTS3std3uni22__T9sliceBitsVmi0Vmi8Z9sliceBitsZ4Trie6__initZ myMain.d-mixin-11(11): Error: undefined identifier _D45TypeInfo_xS3std5regex14__T7ShiftOrTaZ7ShiftOr6__initZ myMain.d-mixin-11(11): Error: undefined identifier _D11TypeInfo_xw6__initZ myMain.d-mixin-11(11): Error: undefined identifier _D11TypeInfo_xb6__initZ myMain.d-mixin-11(11): Error: undefined identifier _D13TypeInfo_xAya6__initZ myMain.d-mixin-11(11): Error: undefined identifier _D41TypeInfo_xS3std5regex12__T5StackTkZ5Stack6__initZ I'm having no idea what's going wrong here. I'm simply moving the import from the file where my main() is located in to the example-module. When removing the import of "my.static.library.binding" in the example-module allows me to successfully compile everything. But I need the import in the example-module. Any suggestions what's going wrong here/how I can solve the error? |
October 19, 2014 Re: "Error: Undefined identifier" when moving import to another module | ||||
---|---|---|---|---|
| ||||
Posted in reply to nrgyzer | On Sunday, 19 October 2014 at 09:39:05 UTC, nrgyzer wrote: > Hi guys, > > when I do the following: > static if ( isCallable!(mixing(m) ) "mixing" ? > void main() { /* do something here */ } What exactly are you doing here? > ... I'm getting many error messages like these: > > myMain.d-mixin-11(11): Error: undefined identifier _D12TypeInfo_xAa6__initZ > myMain.d-mixin-11(11): Error: undefined identifier _D49TypeInfo_xAS3std8typecons16__T5TupleTkTkTkZ5Tuple6__initZ > myMain.d-mixin-11(11): Error: undefined identifier Sounds like your import was also import std.typecons which appears to have been required in your main. |
October 19, 2014 Re: "Error: Undefined identifier" when moving import to another module | ||||
---|---|---|---|---|
| ||||
Posted in reply to monarch_dodra | On Sunday, 19 October 2014 at 14:48:18 UTC, monarch_dodra wrote:
> On Sunday, 19 October 2014 at 09:39:05 UTC, nrgyzer wrote:
>> Hi guys,
>>
>> when I do the following:
>> static if ( isCallable!(mixing(m) )
>
> "mixing" ?
>
>> void main() { /* do something here */ }
>
> What exactly are you doing here?
>
>> ... I'm getting many error messages like these:
>>
>> myMain.d-mixin-11(11): Error: undefined identifier _D12TypeInfo_xAa6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier _D49TypeInfo_xAS3std8typecons16__T5TupleTkTkTkZ5Tuple6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier
>
> Sounds like your import was also import std.typecons which appears to have been required in your main.
"mixing" should be replaced with "mixin": static if ( isCallable!(mixin(m) )
My main is empty in both cases. So nothing done in my main (currently).
|
October 19, 2014 Re: "Error: Undefined identifier" when moving import to another module | ||||
---|---|---|---|---|
| ||||
Posted in reply to nrgyzer | On Sunday, 19 October 2014 at 16:09:41 UTC, nrgyzer wrote:
> "mixing" should be replaced with "mixin": static if ( isCallable!(mixin(m) )
>
> My main is empty in both cases. So nothing done in my main (currently).
Posting full code that actually compiles and reproduces the issue helps.
|
October 19, 2014 Re: "Error: Undefined identifier" when moving import to another module | ||||
---|---|---|---|---|
| ||||
Posted in reply to monarch_dodra | On Sunday, 19 October 2014 at 17:14:14 UTC, monarch_dodra wrote:
> On Sunday, 19 October 2014 at 16:09:41 UTC, nrgyzer wrote:
>> "mixing" should be replaced with "mixin": static if ( isCallable!(mixin(m) )
>>
>> My main is empty in both cases. So nothing done in my main (currently).
>
> Posting full code that actually compiles and reproduces the issue helps.
I posted the full code - except the library. But the library contains over hundred thousand lines of code, so I think that's a bit too much to post here...
|
October 19, 2014 Re: "Error: Undefined identifier" when moving import to another module | ||||
---|---|---|---|---|
| ||||
Posted in reply to nrgyzer | On Sunday, 19 October 2014 at 09:39:05 UTC, nrgyzer wrote: > Hi guys, > > when I do the following: > > module myMain; > > import example; > import std.traits; > import my.static.library.binding; > > static this() > { > foreach ( m; __traits(allMembers, example) ) > { > static if ( isCallable!(mixing(m) ) > { > // ... do something here > } > } > } > > void main() { /* do something here */ } > > And my example-module looks like: > > module example; > > void exmapleFunction() > { > // do something here > } > > I can compile my application without any error, BUT when I move the import of "my.static.library.binding" to the example-module: > > module example; > > import my.static.library.binding; > > void exmapleFunction() > { > // do something here > } > > ... I'm getting many error messages like these: > > myMain.d-mixin-11(11): Error: undefined identifier _D12TypeInfo_xAa6__initZ > myMain.d-mixin-11(11): Error: undefined identifier _D49TypeInfo_xAS3std8typecons16__T5TupleTkTkTkZ5Tuple6__initZ > myMain.d-mixin-11(11): Error: undefined identifier _D75TypeInfo_xAS3std3uni38__T13InversionListTS3std3uni8GcPolicyZ13InversionList6__initZ > myMain.d-mixin-11(11): Error: undefined identifier _D55TypeInfo_xAE3std5regex15__T6ParserTAyaZ6Parser8Operator6__initZ > myMain.d-mixin-11(11): Error: undefined identifier _D31TypeInfo_xAS3std5regex8Bytecode6__initZ > myMain.d-mixin-11(11): Error: undefined identifier _D110TypeInfo_xAS3std3uni152__T4TrieTS3std3uni20__T9BitPackedTbVmi1Z9BitPackedTwVmi1114112TS3std3uni23__T9sliceBitsVmi8Vmi21Z9sliceBitsTS3std3uni22__T9sliceBitsVmi0Vmi8Z9sliceBitsZ4Trie6__initZ > myMain.d-mixin-11(11): Error: undefined identifier _D45TypeInfo_xS3std5regex14__T7ShiftOrTaZ7ShiftOr6__initZ > myMain.d-mixin-11(11): Error: undefined identifier _D11TypeInfo_xw6__initZ > myMain.d-mixin-11(11): Error: undefined identifier _D11TypeInfo_xb6__initZ > myMain.d-mixin-11(11): Error: undefined identifier _D13TypeInfo_xAya6__initZ > myMain.d-mixin-11(11): Error: undefined identifier _D41TypeInfo_xS3std5regex12__T5StackTkZ5Stack6__initZ > > I'm having no idea what's going wrong here. I'm simply moving the import from the file where my main() is located in to the example-module. When removing the import of "my.static.library.binding" in the example-module allows me to successfully compile everything. But I need the import in the example-module. Any suggestions what's going wrong here/how I can solve the error? An import is private by default: http://dlang.org/module.html When you move the import of my.static.library.binding to the "example" module, its declarations are no longer available in the "myMain" module. You'd have to make it a "public import my.static.library.binding" to make it available to other modules. |
October 20, 2014 Re: "Error: Undefined identifier" when moving import to another module | ||||
---|---|---|---|---|
| ||||
Posted in reply to Joakim | On Sunday, 19 October 2014 at 22:22:05 UTC, Joakim wrote:
> On Sunday, 19 October 2014 at 09:39:05 UTC, nrgyzer wrote:
>> Hi guys,
>>
>> when I do the following:
>>
>> module myMain;
>>
>> import example;
>> import std.traits;
>> import my.static.library.binding;
>>
>> static this()
>> {
>> foreach ( m; __traits(allMembers, example) )
>> {
>> static if ( isCallable!(mixing(m) )
>> {
>> // ... do something here
>> }
>> }
>> }
>>
>> void main() { /* do something here */ }
>>
>> And my example-module looks like:
>>
>> module example;
>>
>> void exmapleFunction()
>> {
>> // do something here
>> }
>>
>> I can compile my application without any error, BUT when I move the import of "my.static.library.binding" to the example-module:
>>
>> module example;
>>
>> import my.static.library.binding;
>>
>> void exmapleFunction()
>> {
>> // do something here
>> }
>>
>> ... I'm getting many error messages like these:
>>
>> myMain.d-mixin-11(11): Error: undefined identifier _D12TypeInfo_xAa6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier _D49TypeInfo_xAS3std8typecons16__T5TupleTkTkTkZ5Tuple6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier _D75TypeInfo_xAS3std3uni38__T13InversionListTS3std3uni8GcPolicyZ13InversionList6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier _D55TypeInfo_xAE3std5regex15__T6ParserTAyaZ6Parser8Operator6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier _D31TypeInfo_xAS3std5regex8Bytecode6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier _D110TypeInfo_xAS3std3uni152__T4TrieTS3std3uni20__T9BitPackedTbVmi1Z9BitPackedTwVmi1114112TS3std3uni23__T9sliceBitsVmi8Vmi21Z9sliceBitsTS3std3uni22__T9sliceBitsVmi0Vmi8Z9sliceBitsZ4Trie6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier _D45TypeInfo_xS3std5regex14__T7ShiftOrTaZ7ShiftOr6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier _D11TypeInfo_xw6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier _D11TypeInfo_xb6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier _D13TypeInfo_xAya6__initZ
>> myMain.d-mixin-11(11): Error: undefined identifier _D41TypeInfo_xS3std5regex12__T5StackTkZ5Stack6__initZ
>>
>> I'm having no idea what's going wrong here. I'm simply moving the import from the file where my main() is located in to the example-module. When removing the import of "my.static.library.binding" in the example-module allows me to successfully compile everything. But I need the import in the example-module. Any suggestions what's going wrong here/how I can solve the error?
>
> An import is private by default:
>
> http://dlang.org/module.html
>
> When you move the import of my.static.library.binding to the "example" module, its declarations are no longer available in the "myMain" module. You'd have to make it a "public import my.static.library.binding" to make it available to other modules.
Hm, I made it public and I'm getting the same error. I also imported the same module in my main which also gives me the same error.
|
October 20, 2014 Re: "Error: Undefined identifier" when moving import to another module | ||||
---|---|---|---|---|
| ||||
Posted in reply to nrgyzer | On Monday, 20 October 2014 at 16:05:14 UTC, nrgyzer wrote:
> On Sunday, 19 October 2014 at 22:22:05 UTC, Joakim wrote:
>> On Sunday, 19 October 2014 at 09:39:05 UTC, nrgyzer wrote:
>>> Hi guys,
>>>
>>> when I do the following:
>>>
>>> module myMain;
>>>
>>> import example;
>>> import std.traits;
>>> import my.static.library.binding;
>>>
>>> static this()
>>> {
>>> foreach ( m; __traits(allMembers, example) )
>>> {
>>> static if ( isCallable!(mixing(m) )
>>> {
>>> // ... do something here
>>> }
>>> }
>>> }
>>>
>>> void main() { /* do something here */ }
>>>
>>> And my example-module looks like:
>>>
>>> module example;
>>>
>>> void exmapleFunction()
>>> {
>>> // do something here
>>> }
>>>
>>> I can compile my application without any error, BUT when I move the import of "my.static.library.binding" to the example-module:
>>>
>>> module example;
>>>
>>> import my.static.library.binding;
>>>
>>> void exmapleFunction()
>>> {
>>> // do something here
>>> }
>>>
>>> ... I'm getting many error messages like these:
>>>
>>> myMain.d-mixin-11(11): Error: undefined identifier _D12TypeInfo_xAa6__initZ
>>> myMain.d-mixin-11(11): Error: undefined identifier _D49TypeInfo_xAS3std8typecons16__T5TupleTkTkTkZ5Tuple6__initZ
>>> myMain.d-mixin-11(11): Error: undefined identifier _D75TypeInfo_xAS3std3uni38__T13InversionListTS3std3uni8GcPolicyZ13InversionList6__initZ
>>> myMain.d-mixin-11(11): Error: undefined identifier _D55TypeInfo_xAE3std5regex15__T6ParserTAyaZ6Parser8Operator6__initZ
>>> myMain.d-mixin-11(11): Error: undefined identifier _D31TypeInfo_xAS3std5regex8Bytecode6__initZ
>>> myMain.d-mixin-11(11): Error: undefined identifier _D110TypeInfo_xAS3std3uni152__T4TrieTS3std3uni20__T9BitPackedTbVmi1Z9BitPackedTwVmi1114112TS3std3uni23__T9sliceBitsVmi8Vmi21Z9sliceBitsTS3std3uni22__T9sliceBitsVmi0Vmi8Z9sliceBitsZ4Trie6__initZ
>>> myMain.d-mixin-11(11): Error: undefined identifier _D45TypeInfo_xS3std5regex14__T7ShiftOrTaZ7ShiftOr6__initZ
>>> myMain.d-mixin-11(11): Error: undefined identifier _D11TypeInfo_xw6__initZ
>>> myMain.d-mixin-11(11): Error: undefined identifier _D11TypeInfo_xb6__initZ
>>> myMain.d-mixin-11(11): Error: undefined identifier _D13TypeInfo_xAya6__initZ
>>> myMain.d-mixin-11(11): Error: undefined identifier _D41TypeInfo_xS3std5regex12__T5StackTkZ5Stack6__initZ
>>>
>>> I'm having no idea what's going wrong here. I'm simply moving the import from the file where my main() is located in to the example-module. When removing the import of "my.static.library.binding" in the example-module allows me to successfully compile everything. But I need the import in the example-module. Any suggestions what's going wrong here/how I can solve the error?
>>
>> An import is private by default:
>>
>> http://dlang.org/module.html
>>
>> When you move the import of my.static.library.binding to the "example" module, its declarations are no longer available in the "myMain" module. You'd have to make it a "public import my.static.library.binding" to make it available to other modules.
>
> Hm, I made it public and I'm getting the same error. I also imported the same module in my main which also gives me the same error.
I temporarely solved the error by making the import in the module where the main()-function is located in public and importing this file into the other module. This solved the error but is not a perfect solution...
|
October 20, 2014 Re: "Error: Undefined identifier" when moving import to another module | ||||
---|---|---|---|---|
| ||||
Posted in reply to nrgyzer | This solved the problem for the first time, BUT - I don't know if it's a bug or a feature - I ran into another problem. I'm having the following few lines: module example; private { string[string] myPrivateArray; } static this() { foreach ( m; __traits(allMembers, example) ) { writefln("%s ::> %s", m, __traits(getProtection, m)); } } void main() { /* empty */ } Compiling and running the application say's that myPrivateArray is public: myPrivateArray ::> public I declared myPrivateArray using the private keyword, but the dmd-trait `getProtection` says public. Why? |
October 20, 2014 Re: "Error: Undefined identifier" when moving import to another module | ||||
---|---|---|---|---|
| ||||
Posted in reply to nrgyzer | On Monday, 20 October 2014 at 17:37:34 UTC, nrgyzer wrote:
> This solved the problem for the first time, BUT - I don't know if it's a bug or a feature - I ran into another problem. I'm having the following few lines:
>
> module example;
>
> private
> {
> string[string] myPrivateArray;
> }
>
> static this()
> {
> foreach ( m; __traits(allMembers, example) )
> {
>
> writefln("%s ::> %s", m, __traits(getProtection, m));
> }
> }
>
> void main() { /* empty */ }
>
> Compiling and running the application say's that myPrivateArray is public:
>
> myPrivateArray ::> public
>
> I declared myPrivateArray using the private keyword, but the dmd-trait `getProtection` says public. Why?
Ah, okay, I also need to use mixin(m) to get the protection. But in this case, getProtection only works if I want retrieve the protection for a variable, contained in the same module. I simply can't use getProtection if I'm using the allMembers-trait for another module where the variable is private...
|
Copyright © 1999-2021 by the D Language Foundation