리눅스에서 상속관련 질문입니다.

jb0730의 이미지

전체적인 내용을 요약을 한다면은
IWorkerPool 의 protected로
int _total_thrcount;
Type_Interface_Worker **_threads;
선언을 하여주었습니다.

후에 WorkerPool 에서 IWorkerPool을 상속을 받습니다.
그렇게 하여서 WorkerPool.inl파일에서 상속을 받은 _total_thrcount를 사용을하는데
was not declared in this scope 에러가 나타납니다..

질문) 제 생각으로는 상속에 문제사항이 없다고 생각합니다 하지만 에러 메시지가 나타나서 질문올립니다.
꼭 답이아니더라도 어떠한형식으로 구글에서 검색을 해야 하는지 등이라도 알려주시면 감사하겠습니다.
구글링을 해보았는데 해당하는 문제점에 대해서 찾을수가 없었습니다.
또한 밑에쪽에서 expected class-name before ‘class’ 오류 메시지가 나타나는데 저부분은 ACE 프레임웤에서 에러나는 부분입니다.
ACE는 정상적으로 설정하여서 설치하였습니다. 저쪽에서 오류가 날수있는 상황이 아니라고 믿고있습니다.
저 오류에 대해서도 아신다면은 부탁드립니다...

질문하는 부분들은 찾아본후에 찾을수 없고 방향조차 찾기가 어렵습니다 잘부탁 드립니다.

IWorkerPool 헤더 파일입니다.

namespace HEMS_CENTER {
        template<class Type_Interface_Worker, class Type_task>
        class IWorkerPool {
        public:
                IWorkerPool() {
                }
                IWorkerPool(int threadCount) { }
                virtual ~IWorkerPool() {
                        if (_threads) {
                                for (int i = 0; i < _total_thrcount; i++) {
                                        _threads[i]->stop();
                                        delete _threads[i];
                                }
                        }
                        delete [] _threads;
                }
                virtual int runAll() {
                        for (int i = 0; i < _total_thrcount; i++) {
                                _threads[i]->activate();
                        }
                        return 0;
                }
                virtual int distribute_task(Type_task *task)=0;
        protected:
                int _total_thrcount;
                Type_Interface_Worker **_threads; // worker array;
        };
}
 
#endif

여기가 상속받는 클래스 입니다.. IWorkerPool의 내용을 상속받습니다.

namespace HEMS_CENTER {
        template<class Type_worker, class Type_quedata>
        class WorkerPool<Type_worker , Type_quedata> : public IWorkerPool<IHemsWorker<Type_quedata>, Type_quedata> {
 
        public:
                WorkerPool();
                WorkerPool(int threadCount);
                virtual ~WorkerPool();
                virtual int runAll();
                virtual int distribute_task(Type_quedata *task);
        private:
                unsigned int _threadindex;
        };
}
#include "WorkerPool.inl"

#include "WorkerPool.h"
 
namespace HEMS_CENTER {
        template<class Type_worker, class Type_quedata>
        WorkerPool<Type_worker, Type_quedata>::WorkerPool() : _threadindex(0) {
                _threads = new IHemsWorker<Type_quedata>*[10];
                for (int i = 0; i < 10; i++) {
                        _threads[i] = new Type_worker();
                }
                _total_thrcount = 10;
        }
 
        template<class Type_worker, class Type_quedata>
        WorkerPool<Type_worker, Type_quedata>::WorkerPool(int threadCount) : _threadindex(0) {
                _threads = new IHemsWorker<Type_quedata>*[threadCount];
                for (int i = 0; i < threadCount; i++) {
                        _threads[i] = new Type_worker();
                }
                _total_thrcount = threadCount;
        }

에러메시지 부분입니다...

../libhems/WorkerPool.h:8:8: error: ‘WorkerPool’ is not a template
In file included from ../libhems/WorkerPool.h:20:0,
                 from ../libhems/WorkerpoolMgr.h:11,
                 from HEMSCNTR.cpp:11:
../libhems/WorkerPool.inl: In constructor ‘HEMS_CENTER::WorkerPool<Type_worker, Type_quedata>::WorkerPool()’:
../libhems/WorkerPool.inl:6:3: error: ‘_threads’ was not declared in this scope
../libhems/WorkerPool.inl:10:3: error: ‘_total_thrcount’ was not declared in this scope
../libhems/WorkerPool.inl: In constructor ‘HEMS_CENTER::WorkerPool<Type_worker, Type_quedata>::WorkerPool(int)’:
../libhems/WorkerPool.inl:15:3: error: ‘_threads’ was not declared in this scope
../libhems/WorkerPool.inl:19:3: error: ‘_total_thrcount’ was not declared in this scope
../libhems/WorkerPool.inl: In member function ‘virtual int HEMS_CENTER::WorkerPool<Type_worker, Type_quedata>::runAll()’:
../libhems/WorkerPool.inl:36:10: error: ‘template<class Type_Interface_Worker, class Type_task> class HEMS_CENTER::IWorkerPool’ used without template parameters
../libhems/WorkerPool.inl: In member function ‘virtual int HEMS_CENTER::WorkerPool<Type_worker, Type_quedata>::distribute_task(Type_quedata*)’:
../libhems/WorkerPool.inl:42:36: error: ‘_total_thrcount’ was not declared in this scope
In file included from /usr/local/include/ace/Timer_Queue_T.h:26:0,
                 from /usr/local/include/ace/Timer_Queue.h:26,
                 from ScheduleUpdate.h:4,
                 from HEMSCNTR.cpp:14:
/usr/local/include/ace/Abstract_Timer_Queue.h: At global scope:
/usr/local/include/ace/Abstract_Timer_Queue.h:27:1: error: expected class-name before ‘class’

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.