小编man*_*ans的帖子

如何在dll中创建shared_ptr并通过工厂函数导出它?

我有这段代码:

class DLL_API MyClassWrapper
{
private:

    MyClass * m_myClass;

public:
    MyClassWrapper(SIZE inputSize);
    ~MyClassWrapper();
     inline int OutputSize();

}
typedef  std::shared_ptr<MyClassWrapper> MyClassWrapperPtr;

extern "C"
{
     DLL_API MyClassWrapperPtr CreatreMyClassWrapper(SIZE inputSize)
     {
          return std::make_shared<MyClassWrapper>(inputSize);
      }
}
Run Code Online (Sandbox Code Playgroud)

但它没有用,有错误:

Error   1   error C2526: CreatreMyClassWrapper: C linkage function cannot return C++ class 'std::shared_ptr<_Ty>'   
Run Code Online (Sandbox Code Playgroud)

我理解这个问题,但我该如何解决呢?

我能看到的选项是:

1-不要传递共享指针.这意味着DLL用户应该在使用它之后删除指针.

2-不要使用extern"C":这意味着我必须使用错位名称.

还有其他解决方案吗?

c++ dll shared-ptr

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

使用c ++ 11lambda来提升线程

如何在C++ 11 lambda中使用boost线程?

以下代码不起作用:

int sum;
m_workerThread=new boost::thread([]()
        {
               for(int i=0;i<100;i++)
               {
                    sum=sum+i;
                }
        }
        );
Run Code Online (Sandbox Code Playgroud)

我收到编译错误.

   Error    4   error C3493: 'sum' cannot be implicitly captured because no default capture mode has been specified 
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

c++ multithreading boost c++11

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

未在 C++ 中打开时是否允许写入 ofstream

我有一个这样的代码:

# in class definition
std::ofstream m_myFile;

## some where in code
m_myFile.open(filename);
Run Code Online (Sandbox Code Playgroud)

然后在几个地方,我写文件如下:

m_myFile << "some data to file"<<std::endl;
Run Code Online (Sandbox Code Playgroud)

这运行良好,现在我需要向系统添加一个标志,当未设置时,不应创建和写入此文件。我已经检查过,如果我这样做,我可以运行该应用程序:

if(createFile)
{
      m_myFile.open(filename);
}
Run Code Online (Sandbox Code Playgroud)

并将写入文件保持原样,我在 Windows 上没有收到任何运行时错误。我的问题是,如果我没有打开文件并写入其流,那么标准行为是什么?

我应该得到运行时错误还是 ofstream 只是忘记数据而不是运行时错误?

我正在使用 Visual Studio 2013。

c++ std ofstream

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

什么是从cv垫中删除行或col的最佳方法

假设我有一个mat对象,如下所示:

mat = 
   [75, 97, 66, 95, 15, 22;
    24, 21, 71, 72, 34, 66;
    21, 69, 88, 72, 64, 1;
    26, 47, 26, 40, 95, 24;
    70, 37, 9, 83, 16, 83];
Run Code Online (Sandbox Code Playgroud)

我想从它删除一行说第二行有这样的垫子:

 [75, 97, 66, 95, 15, 22;
 21, 69, 88, 72, 64, 1;
 26, 47, 26, 40, 95, 24;
 70, 37, 9, 83, 16, 83]
Run Code Online (Sandbox Code Playgroud)

或删除col col say col 3:

[75, 97,  95, 15, 22;
 24, 21,  72, 34, 66;
 21, 69,  72, 64, 1;
 26, 47, …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm opencv

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

我应该初始化 cv::Mat

我有这个代码:

mapx.create(image.size(), CV_32FC1);
mapy.create(image.size(), CV_32FC1);
Run Code Online (Sandbox Code Playgroud)

此后mapx和mapy中的值是多少?所有数据都为零吗?

这种类型的初始化怎么样:

  cv::Mat  mapx(image.size(), CV_32FC1);
Run Code Online (Sandbox Code Playgroud)

我是否需要显式地将每个元素的值设置为零?

如何将每个元素的值设置为-1?

c++ opencv

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

在由 cmake 生成的 Visual Studio 上安装目标:它是什么以及如何使用它?

我正在使用 cmake 为 Visual Studio 生成解决方案,并且效果很好。

我注意到作为构建的一部分,它还会在 Visual Studio 上生成一个名为 install 的目标,据说是为了安装构建文件(例如库或包含文件),但是我如何在 Visual Studio 上使用它呢?

我选择这个目标并尝试构建或运行它,但没有任何成功或任何结果(没有将文件复制到其他任何地方等等)。

你能帮我如何在visual studio中使用安装目标来安装生成的文件(在我的例子中它是一个库)。

我正在起诉 cmake gui,但如果需要,我可以使用 cmake 命令行。

更新 1:

我知道它是为我的 cmake 文件上的安装目标生成的,但我的问题是如何运行它?

当我在 VS 解决方案上构建安装时,出现此错误:

Error   3   error MSB3073: The command "setlocal
"C:\Program Files (x86)\CMake\bin\cmake.exe" -DBUILD_TYPE=Debug -P cmake_install.cmake
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
:VCEnd" exited with code 1. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets  132 5 …
Run Code Online (Sandbox Code Playgroud)

c++ cmake visual-studio cmake-gui

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

我是否需要初始化std :: string

我有以下代码:

class myclass
{
    std::string str;
public:
    void setStr(std::string value)
    { 
        str=value;
    }
    std::string getStr()
    {
        return str;
    }
 }

 main()
 {
   myclass ms;
   std::cout<<ms.getStr()<<std::endl;
 }
Run Code Online (Sandbox Code Playgroud)

当我编译并运行此代码时,会出现o错误,在Windows中,我总是将str作为“”。

这一直有效吗?

我需要上述行为,因为如果用户未调用set,str将始终为空字符串。

我应该在构造函数中初始化str如下:

class myclass
{
    std::string str;
public:
    myclass():str(""){}
    void setStr(std::string value)
    { 
        str=value;
    }
    std::string getStr()
    {
        return str;
    }
 }
Run Code Online (Sandbox Code Playgroud)

我想确保所有平台上的行为都相同,并且还要确保代码尽可能小巧,整洁。

c++ initialization stdstring c++11

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

依赖项属性回调不起作用

我有以下代码:

private static readonly DependencyProperty IDProperty = DependencyProperty.Register(
           "ID", typeof(int), typeof(DetailDataControl), new PropertyMetadata(-1, new PropertyChangedCallback(IDChanged)));

    public int ID
    {
        get { return (int)GetValue(IDProperty); }
        set { SetValue(IDProperty, value); }
    }

    private static void IDChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
         // Do something here!  
    }
Run Code Online (Sandbox Code Playgroud)

我可以看到,当我更改ID时,行SetValue(IPproperty被调用),但它不会调用IDChanged.

为什么?

wpf dependency-properties

2
推荐指数
1
解决办法
4159
查看次数

我应该使用OData还是开发自己的WCF服务?

我有一个项目通过Web服务公开Entity Framework数据.我想知道我应该使用OData还是编写自己的WCF服务?似乎OData已经死了.我对吗?

wcf wcf-data-services odata

2
推荐指数
1
解决办法
1771
查看次数

将代码与访问中的数据分开

我正在扩展访问应用程序,同时一些用户正在使用它.这意味着用户正在更改数据库.我创建了一个访问文件的备份并进行处理.通过这种方式,我可以确保在测试系统时,我没有对更改数据库的系统进行任何更改.但是我只能在用户不使用系统时开发,因此他们不会更改数据库(表中的数据).这不好,因为我不能在用户工作的同时工作.

它有什么解决方案吗?

进行此开发的一种好方法是从表中分离VBA代码.我的意思是拥有一个包含VBA代码的访问文件和一个包含表的访问文件.

可能吗?

我怎样才能做到这一点?

有没有关于如何做到这一点的文件?这是什么最好的做法?

编辑:

在对该问题的第一个评论中链接中提供了良好的信息.

ms-access vba access-vba

2
推荐指数
1
解决办法
576
查看次数