我遇到的问题与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) 假设我有一个名为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中从堆栈中删除一个对象?
非常感谢...
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一个功能?
如果我声明两个数组 - arr1并且arr2- 例如,int每个类型大小为10,并初始化第一个数组,并且我希望创建一个arr1in 的副本arr2; 为什么我不能给出指示arr2 = arr1呢?
我知道可以分配两种相同类型的结构.为什么不是阵列的情况?
大家好我对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++构造函数概念,我遇到了麻烦.
鉴于此代码段:
#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();和为什么没有做任何事情?
我有这个标题(从增强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) 如果我有一个短的无符号整数数组。
将 array[k+1] 左移 8 位,将 8 位放入 array[k+1] 的下半部分吗?
或者他们只是因为超出了元素的分配空间而放弃了?
我对C++(以及一般的编程)比较陌生,所以如果问题不是很清楚,请原谅我.
我所拥有的是一个程序,其中创建了一个内部定义的类[我们称之为"class1"]的一定数量的对象.该程序工作得非常好,对象可以做到他们应该做的事情.
我目前要解决的问题如下:在程序退出之前,这些对象不会被销毁(因此内存不会被解除分配),但我需要更早的内存.
在该类的其他成员中,存在其他内部定义的类的对象(其还具有作为第三类的对象的成员).
我的问题如下:如何正确定义"class1"对象的析构函数,以便取消所有数据并释放内存?
我发现了(可能这对你来说很明显)一个析构函数就像
class1::~class1(void) {
}
Run Code Online (Sandbox Code Playgroud)
将无法工作(我为所有内部定义的类定义了类似的析构函数).
阅读我明白我的错误可能是那个什么都不做的析构函数.我该如何解决这个问题?
感谢任何回答/帮助/评论的人.
费德里科
有没有人有一个代码片段可以转换至少最常见的欧洲语言字符?例如:
测试
作为 UTF-8 编码的字符串(即十六进制字节:74 65 73 74 c3 a1 c3 a9 6e 0)
到
睾丸
(我想使用 c/c++ 和 std,或小的跨平台库)