小编CB *_*ley的帖子

具有外部链接的命名空间

我遇到的问题与http://www.cplusplus.com/forum/beginner/12458/上的 'greentype'提到的问题基本相同

我通过名称空间共享变量,当我尝试将函数定义放入单独的文件时出现问题.

考虑以下示例,其中我想将主代码中定义的变量'i'传递给函数a():


*nn.h:*

#ifndef _NN_H_
#define _NN_H_

namespace nn {
int i;
}
#endif
Run Code Online (Sandbox Code Playgroud)

*main.cpp*

#include <iostream>
#include "nn.h"
using namespace std;
using namespace nn;

void a();

int main()
{
i=5;
a();
}

void a()
{
using namespace std;
using namespace nn;

i++;
cout << "i = " << i << endl;
}
Run Code Online (Sandbox Code Playgroud)

但是现在如果我把a()的定义放到一个单独的文件中......


*a.cpp*

#include <iostream>
#include "nn.h"

void a()
{
using namespace std;
using namespace nn;

i++;
cout << "i = " << i << …
Run Code Online (Sandbox Code Playgroud)

c++ namespaces

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

这两种对象实例化方法有什么区别?

假设我有一个名为A的类:

Class A
{
...
}
Run Code Online (Sandbox Code Playgroud)

以下两种实现对象的方法之间的区别是什么:

void main(void)
{
    A a;  // 1
    A *pa=new A();  // 2
}
Run Code Online (Sandbox Code Playgroud)

正如我目前的理解(尚未确定):

  • 方法1在main()方法的堆栈帧上分配对象a,因此该对象无法删除,因为该删除没有意义(不知道为什么,有人可以解释一下吗?).

  • 方法2在进程的堆上分配对象a,并在main()方法的堆栈帧上分配A*vairable pa,因此可以删除对象,并且可以在删除后将pa指定为null.

我对吗?如果我的理解是正确的,有人可以告诉我为什么我不能在方法1中从堆栈中删除一个对象?

非常感谢...

c++

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

A aaa之间的区别; 和A aaa();

class A{
    private:
        string a;
    public:
        A():a("hello world"){};
        A(const string & arg):a(arg){};
        void put()const{cout<<a;};
};

A aaa();
A bbb;
Run Code Online (Sandbox Code Playgroud)

那么,有什么之间的区别A aaa();A bbb;aaa一个功能?

c++ syntax declaration object

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

为什么不能分配相同类型和大小的数组?

如果我声明两个数组 - arr1并且arr2- 例如,int每个类型大小为10,并初始化第一个数组,并且我希望创建一个arr1in 的副本arr2; 为什么我不能给出指示arr2 = arr1呢?

我知道可以分配两种相同类型的结构.为什么不是阵列的情况?

c arrays

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

C++中的字符指针

大家好我对c ++中的字符指针有疑问.每当我们在c ++ char*p ="你好吗?"中创建一个字符指针时,p 应该包含内存位置的地址,其中包含"你好吗"的值. 但是我对一个samle代码和输出感到困惑.为什么要cout<<p退还整个字符串?它应该给出内存地址的值.其次,为什么cout<<*p只给出字符串的第一个字符?提前致谢!码:

#include <iostream>
using namespace std;

int main () {

const char *str = "how are you\n";
int i[]={1,2,3};


 cout << str << endl;   // << is defined on char *.
 cout << i << endl;
 cout << *str << endl;

}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

how are you

0xbfac1eb0

h
Run Code Online (Sandbox Code Playgroud)

c++ pointers

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

(简单构造函数概念)为什么不Foo(); 做任何事情?

这是一个简单的C++构造函数概念,我遇到了麻烦.

鉴于此代码段:

#include <iostream>
using namespace std;

class Foo 
{
public:
    Foo ()      {       cout << "Foo()"  << endl;     }
    ~Foo ()     {       cout << "~Foo()" << endl;     }
};

int main()
{
    Foo f1;
    Foo f2();
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Foo()
~Foo()
Run Code Online (Sandbox Code Playgroud)

好像Foo f2();什么也没做.什么 Foo f2();为什么没有做任何事情?

c++ constructor copy-constructor default-constructor

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

提升初学者,提升::绑定梦魇

我有这个标题(从增强asio示例重做):

    #ifndef MSGSRV_H_
#define MSGSRV_H_
#include <asio.hpp>
#include <boost/array.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/system/error_code.hpp>


namespace msgSrv {

class msgSrv {

private:
    asio::ip::udp::socket *asioSocket;
    asio::io_service *asioIoService;
    int listenPort;
    boost::array<char,1> rcvBuff;
    asio::ip::udp::endpoint lastRcvdPcktEndp;

public:
    msgSrv(int listenPort);
    virtual ~msgSrv();

    void start();
    void pckRcvd( boost::system::error_code &, std::size_t);
};

}
Run Code Online (Sandbox Code Playgroud)

和.cpp:

#include "msgSrv.h"

namespace msgSrv {

    msgSrv::msgSrv(int listenPort) {
        // TODO Auto-generated constructor stub
        this->listenPort = listenPort;
        try{
            asioIoService = new asio::io_service();
            asioSocket =  new asio::ip::udp::socket(*asioIoService, asio::ip::udp::endpoint(asio::ip::udp::v4(), listenPort)); //new asio::ip::udp::socket_(*asioIoService, udp::endpoint(udp::v4(), listenPort));
        }catch(std::exception &e){ …
Run Code Online (Sandbox Code Playgroud)

c++ boost bind

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

C unsigned int 数组和位移

如果我有一个短的无符号整数数组。

将 array[k+1] 左移 8 位,将 8 位放入 array[k+1] 的下半部分吗?

或者他们只是因为超出了元素的分配空间而放弃了?

c arrays int shift bit

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

如何正确定义析构函数

我对C++(以及一般的编程)比较陌生,所以如果问题不是很清楚,请原谅我.

我所拥有的是一个程序,其中创建了一个内部定义的类[我们称之为"class1"]的一定数量的对象.该程序工作得非常好,对象可以做到他们应该做的事情.

我目前要解决的问题如下:在程序退出之前,这些对象不会被销毁(因此内存不会被解除分配),但我需要更早的内存.

在该类的其他成员中,存在其他内部定义的类的对象(其还具有作为第三类的对象的成员).

我的问题如下:如何正确定义"class1"对象的析构函数,以便取消所有数据并释放内存?

我发现了(可能这对你来说很明显)一个析构函数就像

class1::~class1(void) {

}
Run Code Online (Sandbox Code Playgroud)

将无法工作(我为所有内部定义的类定义了类似的析构函数).

阅读我明白我的错误可能是那个什么都不做的析构函数.我该如何解决这个问题?

感谢任何回答/帮助/评论的人.

费德里科

c++ memory-management

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

使用 C++ 将 UTF-8 字符转换为最接近的等效 ASCII 字符(不带 winapi)

有没有人有一个代码片段可以转换至少最常见的欧洲语言字符?例如:

测试

作为 UTF-8 编码的字符串(即十六进制字节:74 65 73 74 c3 a1 c3 a9 6e 0)

睾丸

(我想使用 c/c++ 和 std,或小的跨平台库)

c++ ascii utf-8

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