Cubicsdr: Issues with building CubicSDR on debian: CubicSDR/src/process/VisualProcessor.h typename error

Created on 14 Feb 2017  Â·  4Comments  Â·  Source: cjcliffe/CubicSDR

Hi,
First, thank you for the good work.

I've tried to install CubicSDR on a debian machine using the install guide from:
https://github.com/cjcliffe/CubicSDR/wiki/Build-Linux

Everything is fine until the step: build$ make under Build CubicSDR, when I got a scary error message. (I've put it in the end of this post).

Based on this stackoverflow answer:
http://stackoverflow.com/questions/6489351/nested-name-specifier
I've removed typename keyword from CubicSDR/src/process/VisualProcessor.h and the build succeeded (See git diff in the end of the post). Still, gcc is complaining about other stuff and displaying some warnings.

I dont know if I need to fork and do a pull request to have this issue resolved.
What do you think?

Thank you in advance.

Error message:

~/CubicSDR/CubicSDR/build$ make
Scanning dependencies of target CubicSDR
[  1%] Building CXX object CMakeFiles/CubicSDR.dir/external/rtaudio/RtAudio.cpp.o
[  2%] Building CXX object CMakeFiles/CubicSDR.dir/src/CubicSDR.cpp.o
In file included from /home/ab/CubicSDR/CubicSDR/src/process/ScopeVisualProcessor.h:6:0,
                 from /home/ab/CubicSDR/CubicSDR/src/visual/ScopeCanvas.h:13,
                 from /home/ab/CubicSDR/CubicSDR/src/AppFrame.h:15,
                 from /home/ab/CubicSDR/CubicSDR/src/CubicSDR.h:22,
                 from /home/ab/CubicSDR/CubicSDR/src/CubicSDR.cpp:17:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:15:22: error: expected nested-name-specifier
     typedef typename ThreadQueue<InputDataType*> VisualInputQueueType;
                      ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:15:50: error: invalid declarator before ‘VisualInputQueueType’
     typedef typename ThreadQueue<InputDataType*> VisualInputQueueType;
                                                  ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:16:22: error: expected nested-name-specifier
     typedef typename ThreadQueue<OutputDataType*> VisualOutputQueueType;
                      ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:16:51: error: invalid declarator before ‘VisualOutputQueueType’
     typedef typename ThreadQueue<OutputDataType*> VisualOutputQueueType;
                                                   ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:17:35: error: ‘VisualOutputQueueType’ was not declared in this scope
     typedef typename std::vector< VisualOutputQueueType *>::iterator outputs_i;
                                   ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:17:58: error: template argument 1 is invalid
     typedef typename std::vector< VisualOutputQueueType *>::iterator outputs_i;
                                                          ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:17:58: error: template argument 2 is invalid
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:17:59: error: expected identifier before ‘::’ token
     typedef typename std::vector< VisualOutputQueueType *>::iterator outputs_i;
                                                           ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:17:61: error: typedef name may not be a nested-name-specifier
     typedef typename std::vector< VisualOutputQueueType *>::iterator outputs_i;
                                                             ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:17:61: error: expected ‘;’ at end of member declaration
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:17:70: error: ‘outputs_i’ does not name a type
     typedef typename std::vector< VisualOutputQueueType *>::iterator outputs_i;
                                                                      ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:52:19: error: ‘VisualInputQueueType’ has not been declared
     void setInput(VisualInputQueueType *vis_in) {
                   ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:60:23: error: ‘VisualOutputQueueType’ has not been declared
     void attachOutput(VisualOutputQueueType *vis_out) {
                       ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:67:23: error: ‘VisualOutputQueueType’ has not been declared
     void removeOutput(VisualOutputQueueType *vis_out) {
                       ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:116:5: error: ‘VisualInputQueueType’ does not name a type
     VisualInputQueueType *input = nullptr;
     ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:119:17: error: ‘VisualOutputQueueType’ was not declared in this scope
     std::vector<VisualOutputQueueType *> outputs;
                 ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:119:40: error: template argument 1 is invalid
     std::vector<VisualOutputQueueType *> outputs;
                                        ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:119:40: error: template argument 2 is invalid
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h: In member function ‘bool VisualProcessor<InputDataType, OutputDataType>::isInputEmpty()’:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:26:16: error: ‘input’ was not declared in this scope
         return input->empty();
                ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h: In member function ‘bool VisualProcessor<InputDataType, OutputDataType>::isOutputEmpty()’:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:32:14: error: ‘outputs_i’ was not declared in this scope
         for (outputs_i it = outputs.begin(); it != outputs.end(); it++) {
              ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:32:46: error: ‘it’ was not declared in this scope
         for (outputs_i it = outputs.begin(); it != outputs.end(); it++) {
                                              ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:32:60: error: request for member ‘end’ in ‘((VisualProcessor<InputDataType, OutputDataType>*)this)->VisualProcessor<InputDataType, OutputDataType>::outputs’, which is of non-class type ‘int’
         for (outputs_i it = outputs.begin(); it != outputs.end(); it++) {
                                                            ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h: In member function ‘bool VisualProcessor<InputDataType, OutputDataType>::isAnyOutputEmpty()’:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:43:14: error: ‘outputs_i’ was not declared in this scope
         for (outputs_i it = outputs.begin();  it != outputs.end(); it++) {
              ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:43:47: error: ‘it’ was not declared in this scope
         for (outputs_i it = outputs.begin();  it != outputs.end(); it++) {
                                               ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:43:61: error: request for member ‘end’ in ‘((VisualProcessor<InputDataType, OutputDataType>*)this)->VisualProcessor<InputDataType, OutputDataType>::outputs’, which is of non-class type ‘int’
         for (outputs_i it = outputs.begin();  it != outputs.end(); it++) {
                                                             ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h: In member function ‘void VisualProcessor<InputDataType, OutputDataType>::setInput(int*)’:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:54:9: error: ‘input’ was not declared in this scope
         input = vis_in;
         ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h: In member function ‘void VisualProcessor<InputDataType, OutputDataType>::attachOutput(int*)’:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:63:17: error: request for member ‘push_back’ in ‘((VisualProcessor<InputDataType, OutputDataType>*)this)->VisualProcessor<InputDataType, OutputDataType>::outputs’, which is of non-class type ‘int’
         outputs.push_back(vis_out);
                 ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h: In member function ‘void VisualProcessor<InputDataType, OutputDataType>::removeOutput(int*)’:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:71:9: error: ‘outputs_i’ was not declared in this scope
         outputs_i i = std::find(outputs.begin(), outputs.end(), vis_out);
         ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:72:13: error: ‘i’ was not declared in this scope
         if (i != outputs.end()) {
             ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:72:26: error: request for member ‘end’ in ‘((VisualProcessor<InputDataType, OutputDataType>*)this)->VisualProcessor<InputDataType, OutputDataType>::outputs’, which is of non-class type ‘int’
         if (i != outputs.end()) {
                          ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:73:21: error: request for member ‘erase’ in ‘((VisualProcessor<InputDataType, OutputDataType>*)this)->VisualProcessor<InputDataType, OutputDataType>::outputs’, which is of non-class type ‘int’
             outputs.erase(i);
                     ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h: In member function ‘void VisualProcessor<InputDataType, OutputDataType>::run()’:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:82:13: error: ‘input’ was not declared in this scope
         if (input && !input->empty()) {
             ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h: In member function ‘void VisualProcessor<InputDataType, OutputDataType>::distribute(OutputDataType*)’:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:103:40: error: request for member ‘size’ in ‘((VisualProcessor<InputDataType, OutputDataType>*)this)->VisualProcessor<InputDataType, OutputDataType>::outputs’, which is of non-class type ‘int’
         item->setRefCount((int)outputs.size());
                                        ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:104:14: error: ‘outputs_i’ was not declared in this scope
         for (outputs_i it = outputs.begin(); it != outputs.end(); it++) {
              ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:104:46: error: ‘it’ was not declared in this scope
         for (outputs_i it = outputs.begin(); it != outputs.end(); it++) {
                                              ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:104:60: error: request for member ‘end’ in ‘((VisualProcessor<InputDataType, OutputDataType>*)this)->VisualProcessor<InputDataType, OutputDataType>::outputs’, which is of non-class type ‘int’
         for (outputs_i it = outputs.begin(); it != outputs.end(); it++) {
                                                            ^
/home/ab/CubicSDR/CubicSDR/src/CubicSDR.cpp: In member function ‘virtual bool CubicSDR::OnInit()’:
/home/ab/CubicSDR/CubicSDR/src/CubicSDR.cpp:299:54: error: no matching function for call to ‘SpectrumVisualProcessor::setInput(DemodulatorThreadInputQueue*&)’
     getSpectrumProcessor()->setInput(pipeIQVisualData);
                                                      ^
/home/ab/CubicSDR/CubicSDR/src/CubicSDR.cpp:299:54: note: candidate is:
In file included from /home/ab/CubicSDR/CubicSDR/src/process/ScopeVisualProcessor.h:6:0,
                 from /home/ab/CubicSDR/CubicSDR/src/visual/ScopeCanvas.h:13,
                 from /home/ab/CubicSDR/CubicSDR/src/AppFrame.h:15,
                 from /home/ab/CubicSDR/CubicSDR/src/CubicSDR.h:22,
                 from /home/ab/CubicSDR/CubicSDR/src/CubicSDR.cpp:17:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:52:10: note: void VisualProcessor<InputDataType, OutputDataType>::setInput(int*) [with InputDataType = DemodulatorThreadIQData; OutputDataType = SpectrumVisualData]
     void setInput(VisualInputQueueType *vis_in) {
          ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:52:10: note:   no known conversion for argument 1 from ‘DemodulatorThreadInputQueue* {aka ThreadQueue<DemodulatorThreadIQData*>*}’ to ‘int*’
/home/ab/CubicSDR/CubicSDR/src/CubicSDR.cpp:319:48: error: no matching function for call to ‘ScopeVisualProcessor::setInput(DemodulatorThreadOutputQueue*&)’
     scopeProcessor.setInput(pipeAudioVisualData);
                                                ^
/home/ab/CubicSDR/CubicSDR/src/CubicSDR.cpp:319:48: note: candidate is:
In file included from /home/ab/CubicSDR/CubicSDR/src/process/ScopeVisualProcessor.h:6:0,
                 from /home/ab/CubicSDR/CubicSDR/src/visual/ScopeCanvas.h:13,
                 from /home/ab/CubicSDR/CubicSDR/src/AppFrame.h:15,
                 from /home/ab/CubicSDR/CubicSDR/src/CubicSDR.h:22,
                 from /home/ab/CubicSDR/CubicSDR/src/CubicSDR.cpp:17:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:52:10: note: void VisualProcessor<InputDataType, OutputDataType>::setInput(int*) [with InputDataType = AudioThreadInput; OutputDataType = ScopeRenderData]
     void setInput(VisualInputQueueType *vis_in) {
          ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:52:10: note:   no known conversion for argument 1 from ‘DemodulatorThreadOutputQueue* {aka ThreadQueue<AudioThreadInput*>*}’ to ‘int*’
/home/ab/CubicSDR/CubicSDR/src/CubicSDR.cpp:330:68: error: no matching function for call to ‘SpectrumVisualProcessor::setInput(DemodulatorThreadInputQueue*&)’
         getDemodSpectrumProcessor()->setInput(pipeDemodIQVisualData);
                                                                    ^
/home/ab/CubicSDR/CubicSDR/src/CubicSDR.cpp:330:68: note: candidate is:
In file included from /home/ab/CubicSDR/CubicSDR/src/process/ScopeVisualProcessor.h:6:0,
                 from /home/ab/CubicSDR/CubicSDR/src/visual/ScopeCanvas.h:13,
                 from /home/ab/CubicSDR/CubicSDR/src/AppFrame.h:15,
                 from /home/ab/CubicSDR/CubicSDR/src/CubicSDR.h:22,
                 from /home/ab/CubicSDR/CubicSDR/src/CubicSDR.cpp:17:
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:52:10: note: void VisualProcessor<InputDataType, OutputDataType>::setInput(int*) [with InputDataType = DemodulatorThreadIQData; OutputDataType = SpectrumVisualData]
     void setInput(VisualInputQueueType *vis_in) {
          ^
/home/ab/CubicSDR/CubicSDR/src/process/VisualProcessor.h:52:10: note:   no known conversion for argument 1 from ‘DemodulatorThreadInputQueue* {aka ThreadQueue<DemodulatorThreadIQData*>*}’ to ‘int*’
CMakeFiles/CubicSDR.dir/build.make:77: recipe for target 'CMakeFiles/CubicSDR.dir/src/CubicSDR.cpp.o' failed
make[2]: *** [CMakeFiles/CubicSDR.dir/src/CubicSDR.cpp.o] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/CubicSDR.dir/all' failed
make[1]: *** [CMakeFiles/CubicSDR.dir/all] Error 2
Makefile:117: recipe for target 'all' failed
make: *** [all] Error 2

Git diff output:

diff --git a/src/process/VisualProcessor.h b/src/process/VisualProcessor.h
index a385f4c..57a78d0 100644
--- a/src/process/VisualProcessor.h
+++ b/src/process/VisualProcessor.h
@@ -12,8 +12,8 @@
 template<typename InputDataType = ReferenceCounter, typename OutputDataType = ReferenceCounter>
 class VisualProcessor {
     //
-    typedef typename ThreadQueue<InputDataType*> VisualInputQueueType;
-    typedef typename ThreadQueue<OutputDataType*> VisualOutputQueueType;
+    typedef ThreadQueue<InputDataType*> VisualInputQueueType;
+    typedef ThreadQueue<OutputDataType*> VisualOutputQueueType;
     typedef typename std::vector< VisualOutputQueueType *>::iterator outputs_i;
 public:
        virtual ~VisualProcessor() {

Most helpful comment

@abousselmi , @mirrornoir Thank you for your input ! I tried @abousselmi change, and MSVC compile and run it fine, so I've comited the change on the master branch.

All 4 comments

@abousselmi I'll take a look, and try to revert somechanges I've made on template syntax, trying your suggestion. I work with Visual C++ 2017, but I didn't try other targets. The trick is to have a template syntax accepted by all compilers. Damn you C++ ! :-1:

I can confirm that I had the same issue as @abousselmi. His patch allows for the build to finish. I'm using GCC 6.3.1 on Arch Linux.

@abousselmi , @mirrornoir Thank you for your input ! I tried @abousselmi change, and MSVC compile and run it fine, so I've comited the change on the master branch.

@vsonnier @mirrornoir Thank you :)

Was this page helpful?
0 / 5 - 0 ratings

Related issues

righthalfplane picture righthalfplane  Â·  7Comments

N5FPP picture N5FPP  Â·  6Comments

PaulB47 picture PaulB47  Â·  5Comments

ifuchs picture ifuchs  Â·  3Comments

hhrhhr picture hhrhhr  Â·  5Comments