Re: [netcdfgroup] c++ NcFile assignment doesn't work

Okay, the workaround is to just use pointers. It's unsatisfying because it
feels like there's a bug, but of course, you can just do:

NcFile* foo;
foo = new NcFile("bar.nc", NcFile::replace);
foo->putAtt(...);
...
delete foo;

or if using c++11

std::unique_ptr<NcFile> foo;
foo = std::unique_ptr<NcFile>(new NcFile("bar.nc",NcFile::replace);
foo->putAtt(...)

As mentioned before, this problem arises because foo is a member variable.
More specifically, it's a member of a polymorphic dataFile class.

On Fri, Apr 24, 2015 at 2:10 PM, Jack Stalnaker <jack.stalnaker@xxxxxxxxx>
wrote:

> Okay, I've narrowed down the problem even further. The code fails with a
> different NcBadId error message if I simply declare an empty NcFile:
>
> NcFile foo;
>
> without the followup assignment. I get the same exception, but thrown from
> ncFile.cpp line 15. Curiously, the exception happens later if I immediately
> follow it up with the assignment shown in the previous email.
>
>
> On Fri, Apr 24, 2015 at 1:47 PM, Jack Stalnaker <jack.stalnaker@xxxxxxxxx>
> wrote:
>
>> I should add that the code works just fine if the NcFile variable is
>> initialized immediately. That is, replace:
>>
>>     NcFile foo;
>>     foo = NcFile("blah.nc", NcFile::replace);
>>
>> with just
>>
>>     NcFile foo("blah.nc", NcFile::replace);
>>
>> and it works perfectly well.
>>
>>
>> On Fri, Apr 24, 2015 at 1:33 PM, Jack Stalnaker <jack.stalnaker@xxxxxxxxx
>> > wrote:
>>
>>> Not too far back I noticed that I could not use an NcFile object as a
>>> class member, which I asked about here:
>>> http://netcdf-group.1586084.n2.nabble.com/NcFile-as-class-member-td7575625.html#a7575628
>>>
>>> I never resolved that issue, but I was playing around with it again
>>> today. I wrote a very simple bit of test code, and realized the problem is
>>> actually much more fundamental than the one I originally asked about.
>>> Assignment to an empty NcFile variable does not work anywhere.
>>>
>>> For example:
>>>
>>> #include <netcdf>
>>>
>>> int main(int argc, char *argv[])
>>> {
>>>     using namespace netCDF;
>>>     using namespace netCDF::exceptions;
>>>
>>>     NcFile foo;
>>>     foo = NcFile("blah.nc", NcFile::replace);
>>>
>>>     double baz = 1.0;
>>>     foo.putAtt("bar", ncDouble, size_t(1), &baz);
>>>
>>>     return 0;
>>> }
>>>
>>> fails at the putAtt line with the same netCDF::exceptions::NcBadId
>>> exception I saw in the older question. The exception points to ncGroup.cpp
>>> line 791, which is just the definition of putAtt.
>>>
>>> Anyone have any insight? Thanks.
>>>
>>
>>
>
  • 2015 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: