digitalmars.D.learn - Array of struct pointers error
- Szymon Gatner (20/20) Feb 26 2014 I want to keep a list of pointers-to-C-struct but this line:
- Tobias Pankrath (3/6) Feb 26 2014 cpBody*[] cpBodies;
- Szymon Gatner (4/11) Feb 26 2014 Is there a different array declaration syntax for pointers?
- bearophile (4/5) Feb 26 2014 There is not. But the D-style syntax is preferred for arrays.
- bearophile (5/6) Feb 26 2014 Please reduce your code as much as possible, and show the whole
- Szymon Gatner (11/17) Feb 26 2014 That would be just it:
- bearophile (4/14) Feb 26 2014 Now you have to remove all imports from the code :-)
- Szymon Gatner (5/22) Feb 26 2014 I just pulled cpBody struct definition on top of main() and now
- Tobias Pankrath (9/30) Feb 26 2014 No offense: But an example should be reduced until we can compile
- Szymon Gatner (5/40) Feb 26 2014 Sorry for not doing that. I replied in other response.
I want to keep a list of pointers-to-C-struct but this line: cpBody* cpBodies_[]; cpBodies_ ~= cpBodyNew(0, 0); gives: Error 1 Error 42: Symbol Undefined _D5dchip6cpBody6cpBody11__xopEqualsFKxS5dchip6cpBody6cpBodyKxS5d hip6cpBody6cpBodyZb (bool dchip.cpBody.cpBody.__xopEquals(ref const(dchip.cpBody.cpBody), ref const(dchip.cpBody.cpBody))) D:\projects\DeeDee\ where cpBodyNew(float, float) returns cpBody*, which is struct. Interestingly, when I wrap cpBopy* into a another struct (or a Tuple) like so: struct Body { private cpBody* bdy_; } there is no problem to do Body bodies[]; bodies ~= Body(cpBodyNew(0, 0)); which I use as a workaround. I am using DMD 2.065.
Feb 26 2014
On Wednesday, 26 February 2014 at 09:56:39 UTC, Szymon Gatner wrote:I want to keep a list of pointers-to-C-struct but this line: cpBody* cpBodies_[]; which I use as a workaround. I am using DMD 2.065.cpBody*[] cpBodies;
Feb 26 2014
On Wednesday, 26 February 2014 at 10:01:53 UTC, Tobias Pankrath wrote:On Wednesday, 26 February 2014 at 09:56:39 UTC, Szymon Gatner wrote:Is there a different array declaration syntax for pointers? Anyway, same error.I want to keep a list of pointers-to-C-struct but this line: cpBody* cpBodies_[]; which I use as a workaround. I am using DMD 2.065.cpBody*[] cpBodies;
Feb 26 2014
Szymon Gatner:Is there a different array declaration syntax for pointers?There is not. But the D-style syntax is preferred for arrays. Bye, bearophile
Feb 26 2014
Szymon Gatner:I want to keep a list of pointers-to-C-struct but this line:Please reduce your code as much as possible, and show the whole compilable reduced buggy program here. Bye, bearophile
Feb 26 2014
On Wednesday, 26 February 2014 at 10:59:39 UTC, bearophile wrote:Szymon Gatner:That would be just it: import dchip.all; void main() { cpBody* bodies[]; auto b = cpBodyNew(0, 0); bodies ~= b; } where dchip is pulled using dub. As described earlier, wrapping cpBody* in another struct or Tuple works.I want to keep a list of pointers-to-C-struct but this line:Please reduce your code as much as possible, and show the whole compilable reduced buggy program here. Bye, bearophile
Feb 26 2014
Szymon Gatner:That would be just it: import dchip.all; void main() { cpBody* bodies[]; auto b = cpBodyNew(0, 0); bodies ~= b; } where dchip is pulled using dub. As described earlier, wrapping cpBody* in another struct or Tuple works.Now you have to remove all imports from the code :-) Bye, bearophile
Feb 26 2014
On Wednesday, 26 February 2014 at 11:21:37 UTC, bearophile wrote:Szymon Gatner:I just pulled cpBody struct definition on top of main() and now it compiles... So I guess this means that when importin main() does not see full cpBody struct definition? But why does that even matter? It is just pointers being stored.That would be just it: import dchip.all; void main() { cpBody* bodies[]; auto b = cpBodyNew(0, 0); bodies ~= b; } where dchip is pulled using dub. As described earlier, wrapping cpBody* in another struct or Tuple works.Now you have to remove all imports from the code :-) Bye, bearophile
Feb 26 2014
On Wednesday, 26 February 2014 at 11:07:44 UTC, Szymon Gatner wrote:On Wednesday, 26 February 2014 at 10:59:39 UTC, bearophile wrote:No offense: But an example should be reduced until we can compile it without additional code, excluding phobos and maybe dub'ed projects. But then you would need to provide a package.json. I do think that's related to [1] and a bug with dmd 2.065. Does it work with 2.064? [1] http://www.reddit.com/r/programming/comments/1ytfc5/d_2065_released_with_396_fixes_and_improvements/cfnmkihSzymon Gatner:That would be just it: import dchip.all; void main() { cpBody* bodies[]; auto b = cpBodyNew(0, 0); bodies ~= b; } where dchip is pulled using dub. As described earlier, wrapping cpBody* in another struct or Tuple works.I want to keep a list of pointers-to-C-struct but this line:Please reduce your code as much as possible, and show the whole compilable reduced buggy program here. Bye, bearophile
Feb 26 2014
On Wednesday, 26 February 2014 at 11:22:00 UTC, Tobias Pankrath wrote:On Wednesday, 26 February 2014 at 11:07:44 UTC, Szymon Gatner wrote:Sorry for not doing that. I replied in other response.On Wednesday, 26 February 2014 at 10:59:39 UTC, bearophile wrote:No offense: But an example should be reduced until we can compile it without additional code, excluding phobos and maybe dub'ed projects. But then you would need to provide a package.json.Szymon Gatner:That would be just it: import dchip.all; void main() { cpBody* bodies[]; auto b = cpBodyNew(0, 0); bodies ~= b; } where dchip is pulled using dub. As described earlier, wrapping cpBody* in another struct or Tuple works.I want to keep a list of pointers-to-C-struct but this line:Please reduce your code as much as possible, and show the whole compilable reduced buggy program here. Bye, bearophileI do think that's related to [1] and a bug with dmd 2.065. Does it work with 2.064? [1] http://www.reddit.com/r/programming/comments/1ytfc5/d_2065_released_with_396_fixes_and_improvements/cfnmkihIt certainly seems related as it is also about opCmp() but why is it only linker error and not compilation error?
Feb 26 2014