相关疑难解决方法(0)

尽管可见,但未设置静态变量

我有三个文件,一个主.cpp文件:

#include <stdio.h>
#include "myClass.h"



int main()
{

    myClass mvar;

    tryVar = 23; // why does this not work?

    printf("%d ", mvar.readTryVar()); // This writes out 0, why??

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

一个myClass.cpp文件

#include "myClass.h"


myClass::myClass(void)
{
}


myClass::~myClass(void)
{
}

void myClass::setTryVar()
{
    tryVar = 23334;
}

int myClass::readTryVar()
{
    return tryVar;
}
Run Code Online (Sandbox Code Playgroud)

和myClass.h文件

#pragma once

static int tryVar;

class myClass
{
public:
    myClass(void);
    ~myClass(void);


    void setTryVar();

    int readTryVar();
};
Run Code Online (Sandbox Code Playgroud)

它们是非常简单的文件,但我无法理解为什么静态变量不在main函数中设置,我需要通过myClass函数设置它.

我认为我不太清楚如何创建"翻译单元",我知道"include"指令只是在实际编译之前将头文件的内容复制到.cpp文件中..那么为什么不是'静态变量可见吗?

c++ oop static class object

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

使用extern关键字

我在一个文件中定义了一个变量,并使用extern关键字在另一个文件中声明了它.但我已用不同的数据类型声明它..

file1.c  
    char i;
    main()  
    {   
        foo();  
    }
Run Code Online (Sandbox Code Playgroud)

file2.c中

void foo()  
{  
    extern int i;  
    i = 130;  
    printf("%d", i);  
}
Run Code Online (Sandbox Code Playgroud)

在上面的程序中,内存在main函数中为'i'分配为char数据类型.执行后的答案应该是否定的(-127).但它打印130.无论在foo()函数中分配给'i'的值是什么,不仅打印130.

c gcc

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

为什么它会返回错误?

#include <stdio.h>
int call()
{
    extern int b;
    b=10;
    printf("%d",b);
}

int main ()
{
    int b=8;
    call();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么抛出这样的错误,我得到以下链接器错误:

 /tmp/ccAsFhWX.o:meka.c:(.text+0x7): undefined reference to `_b' collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我想使用extern关键字更改另一个函数中的b值,但它给了我一个错误.我这样做了吗?

c

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

外部结构数组

我有一个全局结构数组声明为

struct _links link[255][255][255];
Run Code Online (Sandbox Code Playgroud)

在我的 main.c. 这个结构数组也用在另一个文件action.c中,我尝试在action.c中将它声明为extern,即

extern struct _links link[255][255][255];
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误消息“数组类型具有不完整的元素类型”。我不明白这是什么意思。我该如何解决这个问题?

谢谢你。

c arrays structure extern

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

GCC/C++无法链接库

我只是C++的初学者.我正在尝试构建一些头文件header.h,但输出总是如下所示:

/tmp/ccTmZKXX.o: In function `main':
main.c:(.text+0x13): undefined reference to `func'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

你能帮我看一下我使用头文件的方式是否正确吗?非常感谢!

主要代码(main.c):

#include "stdio.h"
#include "func.h"

main() {
    double a = f(2.3);
    printf("a=%f\n", a);
}
Run Code Online (Sandbox Code Playgroud)

其中func.c包括:

double func (double x) { return x ;}
Run Code Online (Sandbox Code Playgroud)

其中func.h包括:

double func (double);
Run Code Online (Sandbox Code Playgroud)

我编译:

gcc -o main main.c
Run Code Online (Sandbox Code Playgroud)

c g++

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

C中的全局变量和函数

对不起,这是一个基本问题,但我的所有研究都几乎没有回答我的问题,我只是想在我编写所有代码之前仔细检查.我正在使用C,我有一个头文件,其中声明了一些变量(ints,char数组,int数组).如果我有一个使用这些全局变量的函数,我假设我可以使用变量而不传递它们?

示例头文件:

int state;
int lnArray[];
Run Code Online (Sandbox Code Playgroud)

C文件:

void function(){ 
    int i;
    for(i=0;i<5;i++;){
        if(lnArray[i]<10)    
        state = lnArray[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

c variables global

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

多重定义符号的链接器错误

我有以下文件结构:

XH

#pragma once

#include "Y.h"

int ONE = 1;

int combine();
Run Code Online (Sandbox Code Playgroud)

XC

#include "X.h"

int combine()
{
    return ONE + TWO;
}
Run Code Online (Sandbox Code Playgroud)

YH

#pragma once

int TWO = 2;
Run Code Online (Sandbox Code Playgroud)

YC

#include "Y.h"
Run Code Online (Sandbox Code Playgroud)

MAIN.C

#include "X.h"

int main()
{
    int fusion = combine();

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

我收到以下错误:

LNK1169 one or more multiply defined symbols found

LNK2005 _ONE already defined in Main.obj

LNK2005 _TWO already defined in Main.obj

KLNK2005 _TWO already defined in Main.obj
Run Code Online (Sandbox Code Playgroud)

这没有任何意义.如果我们从Main.c编译器开始必须包含X.h.然后编译器查找与之关联的C文件X.h.里面 …

c

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

c - 如何初始化常量结构

我想避免在我的 C 文件中硬编码常量值,所以我想知道是否有办法直接在头文件中初始化结构常量,以便在我包含头文件的任何地方使用它?(以 #define 适用于简单类型常量的方式)

到目前为止我找到的所有答案都是:

const int var = 5; /*in header*/ 
Run Code Online (Sandbox Code Playgroud)

只适用于 C++(不适用于 C)

使用 C 文件来初始化常量,这不是我要找的

这篇文章的最佳答案:如何使用 extern 在源文件之间共享变量?

这似乎有点复杂......

预先感谢您能给我带来的答案或帮助!:)

编辑:我正在为我的问题添加更多详细信息。

我想存储我在结构中使用的系统的硬件参数:

struct parameters_Component1 {
     int const1 = 5;
     double const2 = 7,847
}
struct parameters_Component2 {
     int const1 = 6;
     double const2 = 9,3343
}
Run Code Online (Sandbox Code Playgroud)

或等效于的结构

#define myConst 5;
Run Code Online (Sandbox Code Playgroud)

我希望将这些常量值重新分组到一个我可以访问和修改的头文件中,而不是出于组织目的而放在我的 C 代码中

c struct global header constants

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

全局内存分段错误

第一个文件:

//a.c

const int i = 9;   //Just contains the variable definition
Run Code Online (Sandbox Code Playgroud)

第二个文件:

//b.c

#include<stdio.h>

extern int i;

int main()
{
    int *ptr = &i;

    printf("Before: %d\n",i);

    *ptr = 99;

    printf("After:  %d\n",i);

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

我原本期望在bcconst出现限定符错误/警告extern int i;和只读内存修改错误,但编译却进展顺利。*ptr = 99;

第一个打印语句打印良好,但第二个打印语句出现分段错误

为什么它没有在编译阶段崩溃并出现预期的错误,而是给出分段错误?

注意 - GCC 8.3.0

c

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

外部变量的目的?

在 c 中,在我看来,在函数之外编写的所有内容都已经是“extern”了。那么,究竟何时必须将变量指定为 extern?

它与定义与声明有关吗?

此外,是否需要使用 extern 声明变量才能访问已在另一个文件中定义的变量?

c terminology global-variables extern

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