小编ana*_*and的帖子

受保护的派生类

 #include <iostream>
using namespace std;

class Base
{
    public:
        Base(){cout <<"Base"<<endl;}
        virtual ~Base(){cout<<"~Base"<<endl;}
        virtual void foo(){ cout<<"foo base"<<endl;}
};

class Derived: private Base
{
    public:
        Derived(){cout<<"Derived"<<endl;}
        virtual ~Derived(){cout<<"~Derived"<<endl;}
        virtual void  foo(){ cout<<"foo dervied"<<endl;}
};


int main(int argc, char *argv[])
{
    Base *pb = new Derived;
    Derived d;
    d.foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我执行上面的示例程序时,我得到以下错误:protected.cpp:在函数'int main(int,char**)'中:protected.cpp:26:错误:'Base'是'Derived'的一个不可访问的基础

为什么不可能用基指针创建Derived对象????


所以我可以创建一个Derived类的instanse

Derived d
Derived d1= new Derived;
Run Code Online (Sandbox Code Playgroud)

但是从Base类指针创建实例就像

Base * b = new derived 
Run Code Online (Sandbox Code Playgroud)

将失败.

这是因为当衍生出来并私有时,Derived不是来自Base的派生类.

它是否正确?????

c++ inheritance

5
推荐指数
1
解决办法
1646
查看次数

EnumChildWindows还是FindWindowEx?

我可以选择使用API​​ EnumChildWindows或FindWindowEx中的任何一个.

有什么建议api更好的性能导向?

FindWindowEx内部是否使用EnumChildWindows来处理特定窗口?

c++ winapi

5
推荐指数
1
解决办法
2653
查看次数

在破坏CComPtr期间的异常

我有一个成员变量声明为

CComPtr<IXMLDOMDocument2> m_spXMLDoc;
Run Code Online (Sandbox Code Playgroud)

XML文档就是这样创建的

CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
    IID_IXMLDOMDocument2, (void**)&m_spXMLDoc));
Run Code Online (Sandbox Code Playgroud)

现在,当应用程序退出时,会抛出异常.Callstack指向p->Release()

~CComPtrBase() throw()
{
   if (p)
      p->Release();
}
Run Code Online (Sandbox Code Playgroud)

当我将鼠标悬停p在VS调试器中时,它指向一些有效的内存.

最后一个callstack指向msxm6中的异常

msxml6.dll!3d6cXX03() 
Run Code Online (Sandbox Code Playgroud)

有什么建议,可能是什么原因?我不认为这是一个CComPtr问题.

com atl exception smart-pointers visual-c++

5
推荐指数
2
解决办法
1599
查看次数

服务没有及时响应启动或控制请求

我在 win32,c++ 中创建了一个服务。我能够创建该服务,但是当我尝试启动它时,出现以下错误。

[SC] StartService FAILED 1053:服务未及时响应启动或控制请求。

找到根本原因的最佳方法是什么,因为此错误消息没有传达任何有意义的信息

c++ service winapi

5
推荐指数
1
解决办法
1万
查看次数

关于调试,多线程的采访问题

我昨天有电话采访问题.面试官问我是否遇到过任何具有挑战性的调试问题?我告诉他我曾经遇到过调试别人代码的问题,我花了3-4天才解决了这个问题.我使用Windbg,符号和崩溃转储来解决问题.

现在这足以告诉我了吗?面试官期待什么?

我不知道还有什么可说的,我在很长一段时间内遇到了这个问题,无法解释所有细节......

这个问题非常常见,我不确定它的正确答案是什么?

还有一个非常常见的问题:

您是否参与过多线程应用程序?你怎么能发现僵局?答:很好找到死锁,我们可以查看内存中进程的快照,并查看正在等待的线程.

接下来的问题:你能做些什么来避免死锁?

  1. 使用waitformultipleobjects
  2. 保持关键部分的顺序

你们说什么?

c++ debugging

4
推荐指数
1
解决办法
3万
查看次数

创建一个类objs数组

考虑下课

class test
{
public:
test(int x){ cout<< "test \n"; }

};
Run Code Online (Sandbox Code Playgroud)

现在我想创建50个类测试对象的数组.我不能改变班级考试.

可以在堆或堆栈上创建对象.

在这种情况下,在堆栈上创建obj是不可能的,因为我们在类中没有默认构造函数

test objs(1)[50]; /// Error...
Run Code Online (Sandbox Code Playgroud)

现在我们可以考虑在这样的堆上创建objs ..

test ** objs = NULL;
objs = (test **) malloc( 50 * sizeof (test *));
for (int i =0; i<50 ; ++ i)
{
   objs[i] = new test(1);
}
Run Code Online (Sandbox Code Playgroud)

我不想使用malloc.还有其他方法吗?

如果你们想到更多的解决方案,请发布它们......

c++

4
推荐指数
1
解决办法
589
查看次数

创建具有> 70%CPU利用率的线程

我正在创建一个测试程序来测试程序的功能,它计算CPU利用率.

现在我想在CPU利用率为100%,50%0%等的不同时间测试该程序.

我的问题是如何使CPU能够利用到100%,也可以是> 80%.

我认为创建一个while循环就足够了

while(i++< 2000)
{
   cout<<" in while "<< endl;
   Sleep(10); // sleep for 10 ms.
}
Run Code Online (Sandbox Code Playgroud)

运行此后,我没有获得高CPU利用率.什么是可能的解决方案,使高CPU密集?

c++ windows

4
推荐指数
1
解决办法
5058
查看次数

如何从windbg中的函数获取返回值?

我正在尝试调试一些win32API,比如返回句柄的Createthread.如何在windbg中获取返回值?

我做了一些研究,发现返回值一般存储在EAx寄存器中.

如果我在CreateThread上放置断点,那么我可以进入Createthread的程序集,最终我会点击ret语句,这意味着Createthread正在返回.

此时我应该检查EAX寄存器的值以获取HANDLE值还是其他方式?

assembly windbg return-value

4
推荐指数
1
解决办法
4104
查看次数

我们可以从单线程多次调用 WaitForSingleObject 来实现互斥吗

我们有互斥体对象的包装器。该包装器的构造函数创建一个互斥体。它还具有 Enter 和 Leave 函数,基本上调用 WaitForSingleObject 和 ReleaseMutex 。

现在程序线程正在执行多个函数,例如

void A()
{
  mutexObj->Enter();
  B();
  mutexObj->Leave();
}

void B()
{
  mutexObj->Enter();
  C();
  mutexObj->Leave();
}
Run Code Online (Sandbox Code Playgroud)

我看到线程在 B() 函数处停止。我读到的有关互斥体的内容是,我们可以从同一线程多次调用 WaitforSingleObjects,这就是为什么我的代码被阻塞的原因。

这是互斥锁的实现

CMutex::CMutex(const TCHAR *name)
   :  m_hMutex(CreateMutex(NULL, FALSE, name))   
{
}

    CMutex::~CMutex()
    {
       if (m_hMutex != NULL)
       {
          CloseHandle(m_hMutex);
          m_hMutex= NULL;
       }
    }

     bool Enter(DWORD milli= INFINITE){
         HANDLE handles[1]= { m_hMutex };
         return(MsgWaitForMultipleObjects(1,handles,FALSE, milli,QS_ALLINPUT) == WAIT_OBJECT_0);
        }
     void Leave(){ReleaseMutex(m_hMutex);}
Run Code Online (Sandbox Code Playgroud)

c++ winapi mutex

4
推荐指数
1
解决办法
4041
查看次数

创建名为在类路径资源中定义的entityManagerFactory的bean时出错

运行spring应用程序时出现以下错误.春天我很新,所以非常困在这里.需要一些帮助来解决这个问题,或者告诉我如何调试和解决此问题.我正在浏览互联网并在我的Pom文件中进行不同的组合.

14:08:34 [31m[WARN ][0;39m [36m[o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext][0;39m [35m[][0;39m [1;34m[0;39mException encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.setPersistenceUnitRootLocation(Ljava/lang/String;)V
14:08:34 [1;31m[ERROR][0;39m [36m[o.s.boot.SpringApplication][0;39m [35m[][0;39m [1;34m[0;39mApplication startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot

4
推荐指数
2
解决办法
4万
查看次数