标签: structure

为什么不能在 c 中初始化 main() 之外的结构值?

我在 Visual Studio 中收到错误代码:

struct coordinates {
    int x;
    int y;
};
struct coordinates point;
point.x = 5;
point.y = 3;

int main() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我初始化point.xand point.yinmain()和/或如果我给出这样的点值,它就会起作用:struct coordinates point = {5, 3}。为什么不能point.xpoint.y之外初始化main()

c struct structure

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

为什么将字符串文字指定为结构体字符数组成员的值会产生错误?

存在一个我定义如下的结构:

struct details
{
    char name[20];
    int age;
    char country[20];
};
Run Code Online (Sandbox Code Playgroud)

然而,在此特定实例中,声明该结构的对象并将字符串文字作为值分配给两个字符数组成员中的任何一个都会产生错误。当我通过以下方式赋值时,会出现错误:

int main()
{
    struct details d1;
    d1.name="Constantine";
    d1.country="Byzantium";
    exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

我的 GCC C 编译器产生的错误如下:

错误:将“const char [12]”分配给“char [20]”时类型不兼容

发生这种情况是否是由于字符串文字是常量字符数组,而我声明为所述结构的组成部分的字符数组成员本质上不是常量?将上述结构成员声明为常量可以解决当前的错误吗?或者我是否采用不同的方法来将初始值加载到所述结构成员?

c structure

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

错误:将循环结构转换为 JSON --> 从构造函数“Topology”的对象开始 | Nodejs Express 中的 property 's' -> object with ....

这是我的index.js。我正在尝试通过查询字符串进行搜索功能。我收到来自客户端的查询,但错误发生在 Campground.find() 中,它给出了上述错误

app.get('/results', (req, res) =>{
const {search_query} = req.query
console.log(search_query);
const campgrounds = Campground.find({title: 'gizzly Camp'})
res.send(campgrounds)})
Run Code Online (Sandbox Code Playgroud)

模型:

const ImageSchema = Schema({
url:String,
filename: String,})


const CampgroundSchema = Schema({
title: String,
image: [
    ImageSchema
],
price: Number,
description: String,
category: {
    type: Schema.Types.ObjectId,
    ref: 'Category',
},
location: String,
geometry: {
    type: {
        type: String,
        enum: ['Point'],
        required: true
    },
    coordinates: {
        type: [Number],
        required: true,
    }
},
author:
{
    type: Schema.Types.ObjectId,
    ref: 'User'
},
reviews: [
    {
        type: …
Run Code Online (Sandbox Code Playgroud)

structure circular-dependency node.js express

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

如何在较大的 PowerShell 脚本中构造 OOP 和 OOD?

我不确定如何构建使用类的更大的 PowerShell 脚本,而且我找不到任何内容。我在一个文件中有五个类。如果没有主类,我该如何调用它们?创建一个简单地实例化其他类并调用它们的独立脚本是否正确?

在 PowerShell 中,我看到的大多数内容都是基于函数,而不是类。而且,PowerShell OOP 和 OOD 与C# 或 Java 意义上的 OOP 设计并不完全一样。有很多相同的概念,但结构让我困惑。如果我不能以全面的方式使用关键字和类进行设计,那么仅有关键字和类是不够的。

我缺少什么搜索,它们是关键字吗?我应该如何构建我的脚本?我已经有很多 PowerShell 类,我想将它们投入生产。怎么办?

我搜索过,也看过 SO 和 Github,但不知道什么是“正确的”。

我的具体情况是使用 v5,但其他时候我可以访问 v7,如果这很重要的话。我有,例如:

class A
{

}

class B
{

}

class C
{

}
Run Code Online (Sandbox Code Playgroud)

PowerShell 中无法Main启动任何事情。

oop powershell design-patterns structure

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

C语言:如何在一行中存储结构数据?

我有一个存储坐标 (x i ,y i )的结构。

typedef struct _FCOORD{
    float X;
    float Y;
}FCOORD,*PFCOORD;
Run Code Online (Sandbox Code Playgroud)

现在我定义一个名为 point 的变量并存储一些数据

FCOORD point;
point.X=20.00f;
point.Y=20.00f;
Run Code Online (Sandbox Code Playgroud)

我想像这样加载数据:

point={20.00f,20.00f};
Run Code Online (Sandbox Code Playgroud)

我正在使用 gcc 编译器用 C 语言进行编码

C:\My_Assets\MinGW\bin>gcc --version
gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)

编译时出现此错误

gcc -c ./src/main.c -I"F:\Codes\Windows\Application\include"
In file included from ./src/main.c:13:0:
./src/threads.c: In function 'WorkerThread':
./src/threads.c:66:19: error: expected expression before '{' token
     R1_data.start={10,10};
                   ^
Run Code Online (Sandbox Code Playgroud)

编辑:请提及结构指针的类似情况,即 PFCOORD。谢谢。

c structure

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

在内存分配之前对灵活成员数组的第一个元素使用 sizeof 是未定义行为?

如果我们有具有灵活成员数组的结构,例如:-

struct test{
    int n;
    int b[];
};
Run Code Online (Sandbox Code Playgroud)

然后,即使在 malloc 完成之前,如果我们尝试打印:-

struct test t;
printf("%lu",sizeof(t.b[0]);
Run Code Online (Sandbox Code Playgroud)

这属于未定义行为吗?

C99 是这样描述灵活成员数组的:-

“如果这个数组没有元素,它的行为就好像它有一个元素一样,但如果尝试访问该元素或生成一个超过该元素的指针,则该行为是未定义的。”

因此,访问b[0]是未定义的行为,但它是否也适用于 sizeof 运算符,因为它是编译时运算符并且t.b[0]在运行时永远不会在这里访问?

当我在 gcc 编译器中尝试这个时,我输出了 4 个字节,但如果它属于未定义的行为,那么我们不能认为这个输出是理所当然的,除非 gcc 给出了一些扩展,在这种情况下我不确定。

c structure sizeof c99 flexible-array-member

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

使用Python的ctypes传递/读取声明为"struct_name***param_name"的参数?

我正在尝试使用Python的ctypes库来访问扫描库SANE中的一些方法.这是我第一次使用ctypes,第一次在一年多的时间内不得不处理C数据类型,所以这里有一个公平的学习曲线,但我认为即使没有这个,这个特殊的声明也会很麻烦:

extern SANE_Status sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only);
Run Code Online (Sandbox Code Playgroud)

首先,我已成功处理SANE_Status(一个枚举)和SANE_Bool(一个typedef c_int).那些都很简单.另一方面,第一个参数让我感到各种各样的悲伤.我不熟悉***开头的符号,到目前为止,我的示踪子弹只能产生垃圾数据.如何格式化此函数的输入,以便我可以读回我的Python结构对象列表?作为参考,被引用的C结构是:

typedef struct
{
    SANE_String_Const name; /* unique device name */
    SANE_String_Const vendor;   /* device vendor string */
    SANE_String_Const model;    /* device model name */
    SANE_String_Const type; /* device type (e.g., "flatbed scanner") */
 }
SANE_Device;
Run Code Online (Sandbox Code Playgroud)

在哪里SANE_String_Const定义为c_char_p.

我的Python/ctypes版本对象是:

class SANE_Device(Structure):
    _fields_ = [
        ("name", c_char_p),
        ("vendor", c_char_p),
        ("model", c_char_p),
        ("type", c_char_p)]
Run Code Online (Sandbox Code Playgroud)

关于我应该传递什么的建议,以便我可以从中得到预期的行为(结构对象列表)?所有答复都赞赏

更新1:

使用以下内容,我能够检索正确的SANE_Device Python结构:

devices …
Run Code Online (Sandbox Code Playgroud)

python ctypes pointers structure sane

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

C语言结构的malloc异常

我有一个像这样定义的结构:

typedef struct {
 int n;
 int *n_p;
 void **list_pp;
 size_t rec_size;
 int n_buffs;
 size_t buff_size
} fl_hdr_type;
Run Code Online (Sandbox Code Playgroud)

在我的代码中我有一个initlialization函数,具有以下功能

fl_hdr_type *fl_hdr;
fl_hdr = malloc(sizeof(fl_hdr_type) + (buff_size_n * rec_size_n));
Run Code Online (Sandbox Code Playgroud)

将那些缓冲区大小传递给函数,以便为缓冲区提供空间.

尺寸通常很小...... 100*50或者类似的东西.这个系统上有很多内存来分配它.我实际上无法发布堆栈跟踪,因为此代码位于另一个网络上,但是从核心文件中的dbx中提取了一些信息:

buff_size_n = 32,rec_size_n = 186

和malloc.c中的stack..line数字

 t_splay:861
 t_delete:796
 realfree: 531
 cleanfree:945
 _malloc:230
 _malloc:186
Run Code Online (Sandbox Code Playgroud)

任何想法为什么失败?

c malloc structure

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

结构中的数组

我是C的新手,在嵌入结构时遇到阵列类型问题.以下是我的问题的一个例子:

typedef struct {
    double J[151][151];
} *UserData;

static int PSolve(void *user_data, N_Vector solution)
{
UserData data;
data = (UserData) user_data;

double J[151][151];
J = data->J;

/* Solve a matrix equation that uses J, stored in 'solution' */

return(0);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译这个时,我得到错误:从类型'double(*)[151]'分配类型'double [151] [151]'时出现不兼容的类型

我目前的解决方法是用代码中的'data-> J [x] [y]'替换'J [x] [y]'来求解矩阵方程,但是分析表明这样效率较低.

将参数更改为PSolve不是一个选项,因为我正在使用sundials-cvode解算器来规定参数的类型和顺序.

c arrays structure

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

对scoped_ptr的弱引用?

一般来说,我都遵循Google风格指南,我觉得这与我看待事物的方式很吻合.我也几乎完全使用boost :: scoped_ptr,这样只有一个经理拥有特定对象的所有权.然后我传递了裸指针,这个想法是我的项目的结构使得所有对象的管理器在使用它们的对象被销毁后总是被销毁.

http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Smart_Pointers

这一切都很棒,但是我只是被一个令人讨厌的小内存stomp bug所困扰,其中所有者恰好在删除使用它的对象之前被删除了.

现在,在每个人都跳起来之前说我对这个模式很傻,为什么我不只是使用shared_ptr?等等,考虑一下我不希望拥有未定义的所有者语义.尽管shared_ptr会捕获这种特殊情况,但它会向系统用户发送错误消息.它说,"我不知道谁拥有这个,它可能是你!"

什么会帮助我本来是一个指向范围指针的弱指针.实际上,一个带有弱引用列表的作用域指针,当作用域指针析构时它们被清空.这将允许单一所有权语义,但给使用对象一个机会来捕捉我遇到的问题.

因此,以scoped_ptr的额外'weak_refs'指针和weak_ptr中'next_weak_ptr'的额外指针为代价,它将成为一个整洁的小单一所有者,多个用户结构.

它甚至可能只是一个调试功能,所以在'release'中,整个系统只会转回一个正常大小的scoped_ptr和一个用于弱引用的标准单指针.

所以这......我的问题是:

  1. 在stl/boost中是否有这样的指针/模式,我错过了,或者我应该自己滚动?
  2. 有没有更好的方法,仍然符合我的单一所有权目标?

干杯,沙恩

c++ structure weak-ptr scoped-ptr

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