小编Bil*_*nch的帖子

无指针继承

假设我有一个具有单个抽象虚函数的类,如下所示:

class MyClass{
  public:
    virtual void MyFunc() = 0;
};
Run Code Online (Sandbox Code Playgroud)

我没有其他功能,也没有数据成员。我还可以保证所有继承自 this 的类都没有任何数据成员,并且除了MyFunc.

强迫你拥有一个指向抽象对象的指针的最大原因(至少在我看来)是实现的大小是未知的......所以有没有办法而不是让一个指向这个类的指针只给出一个类的实例(或伪实例)。以这个为例:

void AFunction(MyFunc inst){  //Note the lack of pointer
  inst.MyFunc();  //This should call the implementation
}
Run Code Online (Sandbox Code Playgroud)

那么这是可能的还是我只是一个一厢情愿的思想家?

c++ inheritance pointers

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

增强中的矩阵求逆

我正在尝试使用boost进行简单的矩阵求逆操作.但是我收到了一个错误.基本上我想找到的是inversted_matrix = inverse(trans(matrix)*matrix)但是我收到一个错误

Check failed in file boost_1_53_0/boost/numeric/ublas/lu.hpp at line 299: 
detail::expression_type_check (prod (triangular_adaptor<const_matrix_type, 
upper> (m), e), cm2) 
terminate called after throwing an instance of 
'boost::numeric::ublas::internal_logic' 
  what(): internal logic 
Aborted (core dumped) 
Run Code Online (Sandbox Code Playgroud)

我的尝试:

#include <boost/numeric/ublas/matrix.hpp> 
#include <boost/numeric/ublas/vector.hpp> 
#include <boost/numeric/ublas/io.hpp> 
#include <boost/numeric/ublas/vector_proxy.hpp> 
#include <boost/numeric/ublas/matrix.hpp> 
#include <boost/numeric/ublas/triangular.hpp> 
#include <boost/numeric/ublas/lu.hpp> 

namespace ublas = boost::numeric::ublas; 
template<class T> 
bool InvertMatrix (const ublas::matrix<T>& input, ublas::matrix<T>& inverse) { 
    using namespace boost::numeric::ublas; 
    typedef permutation_matrix<std::size_t> pmatrix; 
    // create a working copy of the input 
    matrix<T> A(input); 
    // create a …
Run Code Online (Sandbox Code Playgroud)

c++ boost

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

ListActivity不会在数据到达时更新

我正在构建一个小应用程序,我想在新数据到达时自动更新.

从我读过的android文档中,我认为是因为我正在使用更新的技术,我会在后台创建一个ContentObserver,而我只是自动调用Loader.

如果还有更多有用的信息,我很乐意添加它,或者在某个地方上传完整的项目.

另外,我的目标是KitKat(sdk版本19).

应用概述

  1. 我们有一个使用内置ListView的ListActivity.
  2. ListActivity使用Loader和SimpleCursorAdapter获取数据.
  3. Loader通过查询ContentProvider来检索其数据.
  4. ContentProvider由SQLite数据库支持.

此外,在操作栏中,我添加了两个操作,一个用于添加项目,另一个用于清除所有项目.

当我添加项目时,ListView不会使用新条目进行更新,我还可以看到没有在ContentProvider上运行新查询.如果我关闭应用程序并重新启动它,那么这些条目现在可以在ListView中看到.

源代码关注

Activity.java

package us.lynch.listdemo;

import java.text.DateFormat;
import java.util.Date;

import us.lynch.listdemo.R;
import android.app.ListActivity;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.ContentValues;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.CursorAdapter;
import android.widget.SimpleCursorAdapter;

public class Activity extends ListActivity implements LoaderCallbacks<Cursor> {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setListAdapter(new SimpleCursorAdapter(this, R.layout.listitem, null, new String[] { "string" }, new int[] { R.id.text }, 0));
        getLoaderManager().initLoader(0, null, this); …
Run Code Online (Sandbox Code Playgroud)

android android-contentprovider android-listview

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

const char的多重定义*

我得到了全局的上述消息链接器错误

const char* HOST_NAME = "127.0.0.1";
Run Code Online (Sandbox Code Playgroud)

我不认为我已经编译了两次文件,但这里是我对文件的定义.

main.cpp中

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include "connection.hpp"
Run Code Online (Sandbox Code Playgroud)

connection.cpp

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <arpa/inet.h>
#include "connection.hpp"
Run Code Online (Sandbox Code Playgroud)

connection.hpp

#ifndef __connection__
#define __connection__
#include <unistd.h>
#include <netinet/in.h>

const int BUFFSIZE = sysconf(_SC_PAGESIZE);             //Define page size
const char* HOST_NAME = "127.0.0.1";                    //Local host
//Definition of a class
#endif
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

c++ linker-errors multiple-definition-error

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

C结构指针访问字段

我已经读过,如果我们有一个指向结构类型对象的指针,我们就不能通过使用星号(*)访问对象字段,但我们需要使用它 - >(如箭头符号).

现在虽然我读到它但我不明白为什么我们不能使用星号,我会尝试提供一个代码示例和一个图片,说明我如何在内存中可视化结构,以帮助您了解阻止我理解的内容这个话题.

好的,所以这是我们的代码:

#include <stdio.h>

typedef struct MyStruct
{
    char c1;
    char c2;
} MyStruct;

int main()
{
    MyStruct s1; // Let's assume s1's address is 0x34A
    s1.c1 = 'A';
    s1.c2 = 'B';
    printf("s1 c1 is %c and c2 is %c.\n", s1.c1, s1.c2);

    MyStruct *p = &s1; // Declaring our pointer to point to s1 address, so p points to 0x34A
    printf("s1 c1 is %c and c2 is %c.\n", p->c1, p->c2); // I know this is the valid …
Run Code Online (Sandbox Code Playgroud)

c struct pointers

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

在linux内核中使用workQueue传递/共享数据

请任何人都可以帮助我理解“将数据(共享或私有)”传递给 workQueue 吗?

1:声明一个回调/工作处理程序

static void sample_work_fn(struct work_struct *Wq)
{
...........
...........
}
Run Code Online (Sandbox Code Playgroud)

2:填写一个work_struct结构(静态)

static DECLARE_WORK(sample_work, sample_work_fn);
Run Code Online (Sandbox Code Playgroud)

3:安排工作队列

static void samp_sysrq(int arg)
{
        schedule_work(sample_work);
}
Run Code Online (Sandbox Code Playgroud)

在这里,如果我需要使用我的工作队列传递/共享数据,这怎么可能?

linux-device-driver linux-kernel embedded-linux

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

python中“is”和“isinstance”的区别

对于下面的代码,str是 unicode 类型的变量,但是

str is unicode            # returns false
isinstance(str, unicode)  # returns true
Run Code Online (Sandbox Code Playgroud)

为什么is返回假?

python

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

C中的Tilde算子

 unsigned short int i = 0;
 printf("%u\n",~i);
Run Code Online (Sandbox Code Playgroud)

为什么此代码在控制台中返回32位数字?它应该是16位,因为short是2个字节.

输出为4,294,967,295,应为65,535.

c int unsigned short

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

奇怪的VS名称破坏行为?

考虑以下无操作代码,我在Win10 64位上编译为C++:

int test(int argc, char *argv[]);
int main(int argc, char *argv[])
{
   return test(argc, argv);
}

int test(int argc, char **argv)
{
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果所有这些代码都放在同一个.cpp文件中,它会在VS2012,VS2013,VS2015和mingw32-g ++ v4.7.1中正确编译和链接,正如我所期望的那样.

但是,如果我只是将测试函数的定义移动到一个单独的文件中,生成的两个文件仍然可以编译并与mingw编译器正确链接,但在VS的所有版本上我得到:

error LNK2019: unresolved external symbol "int __cdecl test(int,char * * const)" (?test@@YAHHQAPAD@Z) referenced in function _main"
Run Code Online (Sandbox Code Playgroud)

我可以通过简单地改变测试功能做argv参数的声明中VS解决此问题char *argv[],但不应该是必要的,因为char *argv[]char **argv用来声明参数时的意思完全一样的东西.

我没有尝试过,但它让我想知道VS是否也会考虑两个版本不同的重载目的.

c++ name-mangling visual-studio-2012

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

为什么 c++ 将大数四舍五入到 ceil 并将小数四舍五入到地板

"x","y" 是 C++ 中的两个 long long 类型变量,我为其分配了两个不同的数字。

变量类型很长很长,但我已经为整数分配了小数。

所以我预计它会修剪小数部分并只显示整数部分。

它修剪掉小数点后的数字并返回一个整数。

在此处输入图片说明

输出 :

在此处输入图片说明

我期待 x 的 floor() 但它返回了一些以 6 而不是 5 结尾的整数,我的意思是它返回了 ceil(x)。但在第二种情况下它返回了 floor(y)。

它仅在整数太长时发生。

那么这可能是什么原因呢?

我在 Visual Studio 代码上使用 minGW c++17 版本..但在线编译器也发生了同样的情况。

c++ variables integer memory-management c++17

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